So gehen Sie mit fehlenden Feldern während der JSON-Deserialisierung in Json.NET um
Beim Deserialisieren von JSON-Objekten mit Json.NET ist es wichtig, fehlende Felder korrekt zu behandeln. Standardmäßig ignoriert Json.NET fehlende Eigenschaften und gibt Standardwerte zurück, was bei der nachfolgenden Verarbeitung zu Fehlern führen kann.
Bedenken Sie den folgenden Code:
<code class="language-csharp">using Newtonsoft.Json; namespace Json_Fail_Test { [JsonObject(MemberSerialization.OptOut)] private class MyJsonObjView { [JsonProperty("MyJsonInt")] public int MyJsonInt { get; set; } } static void Main(string[] args) { string correctData = @"{'MyJsonInt': 42}"; string wrongData = @"{'SomeOtherProperty': 'fbe8c20b'}"; var goodObj = JsonConvert.DeserializeObject<MyJsonObjView>(correctData); var badObj = JsonConvert.DeserializeObject<MyJsonObjView>(wrongData); Console.WriteLine(goodObj.MyJsonInt); // 输出 42 Console.WriteLine(badObj.MyJsonInt); // 输出 0 } }</code>
Dieser Code versucht, ein JSON-Objekt in ein MyJsonObjView-Objekt zu deserialisieren. Der richtige JSON enthält das Attribut „MyJsonInt“, der falsche JSON hingegen nicht. Die Ausgabe lautet wie folgt:
<code>42 0</code>
Wie Sie sehen, schlägt der Code beim Deserialisieren des falschen JSON stillschweigend fehl und gibt Standardwerte für fehlende Eigenschaften zurück. Um ein solches Verhalten zu vermeiden, können wir die Einstellung MissingMemberHandling
verwenden.
<code class="language-csharp">JsonSerializerSettings settings = new JsonSerializerSettings(); settings.MissingMemberHandling = MissingMemberHandling.Error;</code>
Indem wir MissingMemberHandling
auf Error
setzen, weisen wir Json.NET an, eine Ausnahme auszulösen, wenn während der Deserialisierung eine fehlende Eigenschaft auftritt.
<code class="language-csharp">try { var goodObj = JsonConvert.DeserializeObject<MyJsonObjView>(correctData, settings); var badObj = JsonConvert.DeserializeObject<MyJsonObjView>(wrongData, settings); } catch (Exception ex) { Console.WriteLine(ex.GetType().Name + ": " + ex.Message); }</code>
Wenn wir nun den falschen JSON deserialisieren, erhalten wir eine Ausnahme:
<code>JsonSerializationException: Could not find member 'SomeOtherProperty' on object of type 'MyJsonObjView'. Path 'SomeOtherProperty', line 3, position 33.</code>
Diese Ausnahme weist eindeutig darauf hin, dass die Deserialisierung aufgrund eines fehlenden Attributs fehlgeschlagen ist, sodass wir den Fehler angemessen behandeln können.
Durch das Festlegen des MissingMemberHandling
-Attributs können wir das Verhalten von Json.NET beim Umgang mit fehlenden JSON-Attributen effektiver steuern, wodurch potenzielle Fehler vermieden und die Robustheit unseres Codes verbessert werden.
Das obige ist der detaillierte Inhalt vonWie gehe ich mit fehlenden Feldern während der JSON-Deserialisierung in Json.NET um?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!