Heim >Backend-Entwicklung >C++ >Wie behebe ich JSON-Deserialisierungsfehler bei der Verwendung von JsonConvert.DeserializeObject mit verschachtelten Sammlungen 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!