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
Freigeben: 2025-01-19 05:44:12
Original
421 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage