Wie kann ich ein custom root-Knoten beim serialisieren eines Objekts mit JSON.NET?

Habe ich Hinzugefügt eine benutzerdefinierte Eigenschaft, um einige meiner Objekte wie diese:

[JsonCustomRoot("status")]
public class StatusDTO 
{
    public int StatusId { get; set; }
    public string Name { get; set; }
    public DateTime Created { get; set; }
}

Das Attribut ist sehr einfach:

public class JsonCustomRoot :Attribute
{
    public string rootName { get; set; }

    public JsonCustomRoot(string rootName)
    {
        this.rootName = rootName;
    }
}

Die Standard-Ausgabe aus JSON.NET beim serialisieren wird eine Instanz eines Objekts ist diese:

{"StatusId":70,"Name":"Closed","Created":"2012-12-12T11:50:56.6207193Z"}

Nun ist die Frage: Wie kann ich ein root-Knoten, um die JSON mit dem Wert des benutzerdefinierten Attributs, wie so:

{status:{"StatusId":70,"Name":"Closed","Created":"2012-12-12T11:50:56.6207193Z"}}

Ich gefunden habe, mehrere Artikel zu erwähnen, die IContractResolver - Schnittstelle, aber ich kann nicht begreifen, wie es zu tun. Meine versuche, auch diese noch unfertige Stück code:

protected override JsonObjectContract CreateObjectContract(Type objectType)
{
    JsonObjectContract contract = base.CreateObjectContract(objectType);

    var info = objectType.GetCustomAttributes()
                   .SingleOrDefault(t => (Type)t.TypeId==typeof(JsonCustomRoot));
    if (info != null)
    {
        var myAttribute = (JsonCustomRoot)info;
        //How can i add myAttribute.rootName to the root from here?
        //Maybe some other method should be overrided instead?
    }

    return contract;
}
Ich bin auch auf der Suche nach so etwas, ich will nicht wickeln meine Antworten auf die Controller für jeden GET ich war auf der Suche nach einem Weg, dies zu tun, als entweder eine Einstellung oder ein benutzerdefiniertes Attribut für jedes Modell.
Im Idealfall würde ich gerne, mache fast das gleiche wie deins, aber ich würde es wieder wie ein array, auch wenn nur ein Objekt zurückgegeben.e.g: {status:[{"StatusId":70,"Name":"Closed","Created":"2012-12-12T11:50:56.6207193Z"}]}. Auch der Versuch mit IContractResolver und JSON.NET
Ich gebloggt über eine Lösung speziell für web-api im emadibrahim.com/2014/04/09/...

InformationsquelleAutor Espo | 2012-12-12

Schreibe einen Kommentar