2017-09-02 6 views
1

Ich habe eine massive JSON-Datei, die ich analysiere. Aber ich habe ein Problem, wenn ich es analysiere. Es gibt ein Feld in der Datei, die ähnlich aussieht:Konvertieren Json-Objekt in benutzerdefinierte Objekt

"pageTitle": { 
"en": "Some content here...." 
}, 

ich dies als ein Wörterbuch zu speichern:

[JsonProperty("pageTitle")] 
    public Dictionary<string, string> PageTitle { get; set; } 

Aber manchmal dieses Feld leer ist, und wenn es die Json.Net Methode

Fehler beim Versuch, pageTitle zu konvertieren, da es scheinbar ein leeres Array und kein Objekt ist. Gibt es eine JsonPropery, um dieses leere Array zu ignorieren und einfach weiterzumachen?

Antwort

0

Wenn Sie die null Werte ignorieren möchte, dann ist es möglich, eine Immobilie zu dekorieren, wie folgt:

[JsonProperty("pageTitle", NullValueHandling = NullValueHandling.Ignore)] 

Wenn die JSON-String ist [] oder eine ungültige Eingabe ein leeres Array analysiert werden, damit sie haben könnte durch Verlängerung der abstrakte Klasse eines benutzerdefinierten Wandler zu schreiben, JsonConverter oder eine der eingebauten Wandler in Newtonsoft.Json.Converters erstreckt, und rufen sie es als:

var obj = JsonConvert.DeserializeObject<MyCustomClass>(jsonString, new CustomConverter()); 

OR

die Ausnahme behandeln, die wie folgt während der Deserialisierung geschieht:

var obj = JsonConvert.DeserializeObject<MyCustomClass>(json, new 
         JsonSerializerSettings 
         { 
          Error = HandleError 
         }); 

Handler:

private static void HandleError(object sender, ErrorEventArgs e) 
    { 
     // Get the error message using 'e.ErrorContext.Error.Message' 
     // e.ErrorContext.OriginalObject will give you the object/property that failed to deserialze 
     e.ErrorContext.Handled = true; 
    }