Heim >Backend-Entwicklung >C++ >Wie gehe ich mit fehlenden Feldern während der JSON-Deserialisierung in Json.NET um?

Wie gehe ich mit fehlenden Feldern während der JSON-Deserialisierung in Json.NET um?

Linda Hamilton
Linda HamiltonOriginal
2025-01-19 05:44:12422Durchsuche

How to Handle Missing Fields During JSON Deserialization in Json.NET?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn