Heim >Backend-Entwicklung >C++ >Wie behebe ich JSON-Deserialisierungsfehler bei der Verwendung von JsonConvert.DeserializeObject mit verschachtelten Sammlungen in C#?

Wie behebe ich JSON-Deserialisierungsfehler bei der Verwendung von JsonConvert.DeserializeObject mit verschachtelten Sammlungen in C#?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2025-01-15 11:55:43717Durchsuche

How to Resolve JSON Deserialization Errors When Using JsonConvert.DeserializeObject with Nested Collections in C#?

Deserialisierung von JSON in C#-POCO-Klassen: Behebung von Problemen mit verschachtelten Sammlungen

Die Verwendung von JsonConvert.DeserializeObject zum Konvertieren von JSON-Daten in C# Plain Old CLR Objects (POCOs) ist im Allgemeinen unkompliziert. Beim Umgang mit verschachtelten Sammlungen können jedoch Herausforderungen auftreten.

Problem:

Stellen Sie sich einen Benutzer-POCO mit verschachtelten accounts- und badges-Sammlungen vor. Beim Versuch einer Deserialisierung wird möglicherweise eine Ausnahme ausgelöst, die darauf hinweist, dass die Eigenschaft accounts (als Sammlung wie List<T> erwartet) als JSON-Objekt behandelt wird.

Lösung:

Die Lösung umfasst zwei Schlüsselaspekte:

1. Korrektes Definieren der accounts-Eigenschaft:

Die C#-POCO-Klasse muss die Eigenschaft accounts als Objekt deklarieren und die JSON-Struktur widerspiegeln. Dies bedeutet normalerweise, dass eine separate Account-Klasse zur Darstellung der Kontodaten erstellt wird.

2. Nutzung des JsonProperty Attributs:

Das Attribut JsonProperty ist entscheidend für die Zuordnung von JSON-Eigenschaftsnamen zu entsprechenden C#-Eigenschaften. Dies gewährleistet eine genaue Deserialisierung.

Anschauliches Beispiel:

Dieses Beispiel zeigt die erfolgreiche JSON-Deserialisierung in eine POCO-Klasse, die verschachtelte Sammlungen verarbeitet:

<code class="language-csharp">using Newtonsoft.Json;
using System.Net;

public class Example
{
    public static void Main(string[] args)
    {
        using (WebClient wc = new WebClient())
        {
            string json = wc.DownloadString("http://coderwall.com/mdeiters.json"); // Replace with your JSON source
            User user = JsonConvert.DeserializeObject<User>(json);
            // Access user properties here...
        }
    }
}

public class User
{
    [JsonProperty("username")]
    public string Username { get; set; }

    [JsonProperty("name")]
    public string Name { get; set; }

    [JsonProperty("location")]
    public string Location { get; set; }

    [JsonProperty("endorsements")]
    public int Endorsements { get; set; }

    [JsonProperty("team")]
    public string Team { get; set; }

    [JsonProperty("accounts")]
    public Account Accounts { get; set; }

    [JsonProperty("badges")]
    public List<Badge> Badges { get; set; }
}

public class Account
{
    [JsonProperty("github")] // Assuming 'github' is a property in the JSON
    public string Github { get; set; }
}

public class Badge
{
    [JsonProperty("name")]
    public string Name { get; set; }
    [JsonProperty("description")]
    public string Description { get; set; }
    [JsonProperty("created")]
    public string Created { get; set; }
    [JsonProperty("badge")]
    public string BadgeUrl { get; set; }
}</code>

Indem Sie diese Richtlinien befolgen, können Sie JSON-Daten mit verschachtelten Sammlungen effektiv in Ihre C#-POCO-Klassen deserialisieren, selbst wenn die JSON-Struktur geringfügig von einer einfachen Listendarstellung abweicht. Denken Sie daran, "http://coderwall.com/mdeiters.json" durch Ihre tatsächliche JSON-Datenquelle zu ersetzen. Beachten Sie auch die Hinzufügung der Newtonsoft.Json using-Anweisung und der expliziten Eigenschaftsdeklaration innerhalb der verschachtelten Klassen.

Das obige ist der detaillierte Inhalt vonWie behebe ich JSON-Deserialisierungsfehler bei der Verwendung von JsonConvert.DeserializeObject mit verschachtelten Sammlungen in C#?. 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