2010-06-04 16 views
6

Ich versuche, ein C# -Objekt (ImportedProductCodesContainer) mit Daten zu füllen, die JSON.NET-Deserialisierung verwenden.JSON.NET-Deserialisierung in C# führt zu leerem Objekt

ImportedProductCodesContainer.cs:

using Newtonsoft.Json; 

[JsonObject(MemberSerialization.OptOut)] 
public class ImportedProductCodesContainer 
{ 
    public ImportedProductCodesContainer() 
    { 

    } 

    [JsonProperty] 
    public ActionType Action { get; set; } 

    [JsonProperty] 
    public string ProductListRaw { get; set; } 


    public enum ActionType {Append=1, Replace}; 
} 

JSON-String:

{"ImportedProductCodesContainer":{"ProductListRaw":"1 23","Action":"Append"}} 

C# Code:

var serializer = new JsonSerializer(); 
var importedProductCodesContainer = 
    JsonConvert.DeserializeObject<ImportedProductCodesContainer>(argument); 

Das Problem ist, dass importedProductCodesContainer den Code nach der Ausführung oben leer bleibt (Aktion = 0, ProductListRaw = Null). Kannst du mir bitte helfen, herauszufinden, was los ist?

Antwort

1

Sie haben eine zu viele Ebenen von ImportedProductCodesContainer. Es erstellt ein neues ImportedProductCodesContainer-Objekt (aus dem Vorlagen-Deserializer) und versucht dann, eine Eigenschaft namens ImportedProductCodesContainer (von der obersten Ebene Ihres JSON) zu setzen, die eine Struktur mit den anderen beiden Werten wäre. Wenn Sie den inneren Teil deserialisieren nur

{"ProductListRaw":"1 23","Action":"Append"} 

dann sollten Sie das Objekt erhalten Sie erwarten, oder Sie können eine neue Struktur mit einer ImportedProductCodesContainer Eigenschaft

[JsonObject(MemberSerialization.OptOut)] 
public class ImportedProductCodesContainerWrapper 
{ 
    [JsonProperty] 
    public ImportedProductCodesContainer ImportedProductCodesContainer { get; set; } 
} 

und Vorlage Ihre Deserializer mit diesem dann erstellen Dein original JSON sollte funktionieren.

Es ist auch möglich, dieses Verhalten mithilfe anderer Attribute/Flags mit dieser JSON-Bibliothek zu ändern, aber ich weiß es nicht gut genug, um es zu sagen.

+0

Danke, das hat funktioniert! –

Verwandte Themen