2017-04-13 4 views
1

Ich verwende den folgenden Code für die Serialisierung.Json.net Deserialisierung gibt ein leeres Objekt zurück

var json = JsonConvert.SerializeObject(new { summary = summary }); 

summary ist ein benutzerdefiniertes Objekt vom Typ SplunkDataModel:

public class SplunkDataModel 
{ 
    public SplunkDataModel() {} 

    public string Category { get; set; } 
    public int FailureCount { get; set; } 
    public Dictionary<string, SplunkError> FailureEntity { get; set; } 
    public Dictionary<string, string> JobInfo { get; set; } 
    public string JobStatus { get; set; } 
    public int SuccessCount { get; set; } 
    public List<string> SuccessEntity { get; set; } 
    public int TotalCount { get; set; } 
} 

Serialisierung Ergebnisse im JSON unter:

{ 
    "summary": { 
    "Category": "category", 
    "JobStatus": "Failure", 
    "JobInfo": { 
     "Course processing failed": "" 
    }, 
    "TotalCount": 0, 
    "SuccessCount": 0, 
    "FailureCount": 0, 
    "FailureEntity": {}, 
    "SuccessEntity": [] 
    } 
} 

nun zu Testzwecken Einheit, muss ich es deserialisieren, Der folgende Code gibt jedoch ein Objekt mit leeren Werten zurück. Wo gehe ich falsch?

var deserialized = JsonConvert.DeserializeObject<SplunkDataModel>(contents); 

Antwort

1

Wenn Sie Ihre SplunkDataModel zu JSON serialisiert, können Sie es in einem Objekt mit einer summary Eigenschaft gewickelt. Wenn Sie das JSON wieder zu Objekten deserialisieren, müssen Sie dieselbe Struktur verwenden. Es gibt mehrere Möglichkeiten, dies zu tun; Sie alle erzielen das gleiche Ergebnis.

  1. eine Klasse Deklarieren der Stammebene des JSON darzustellen und deserialisieren in das:

    public class RootObject 
    { 
        public SplunkDataModel Summary { get; set; } 
    } 
    

    Dann:

    var deserialized = JsonConvert.DeserializeObject<RootObject>(contents).Summary; 
    
  2. Oder deserialize von Beispiel eine Instanz eines anonymer Typ, und rufen Sie dann Ihr Objekt aus dem Ergebnis ab:

    var anonExample = new { summary = new SplunkDataModel() }; 
    var deserialized = JsonConvert.DeserializeAnonymousType(contents, anonExample).summary; 
    
  3. Oder deserialisieren zu einem JObject, dann materialisieren Ihr Objekt aus, dass:

    JObject obj = JObject.Parse(contents); 
    var deserialized = obj["summary"].ToObject<SplunkDataModel>(); 
    
+0

thanks for sharing .. ich es in der 3. Art und Weise tat. – Manish

Verwandte Themen