Heim >Backend-Entwicklung >C++ >Wie behebe ich JsonConvert.DeserializeObject-Fehler beim Deserialisieren von JSON in C#-POCO-Klassen?
JsonConvert.DeserializeObject: Deserialisieren Sie JSON in die C#-POCO-Klasse
Beim Umgang mit RESTful-APIs ist es oft notwendig, JSON-Antworten in C# Plain Old CLR Objects (POCO) zu deserialisieren. Eine häufig verwendete Methode ist JsonConvert.DeserializeObject.
Frage:
Betrachten Sie die folgende Benutzer-POCO-Klasse:
User.cs:
<code class="language-c#">public class User { public string Username { get; set; } public string Name { get; set; } public string Location { get; set; } // ... [JsonProperty("accounts")] public List<Account> Accounts { get; set; } }</code>
Beim Versuch, JSON mit JsonConvert.DeserializeObject in diese Klasse zu deserialisieren, wird eine Ausnahme ausgelöst, die darauf hinweist, dass das JSON-Array nicht in eine Liste von Konten deserialisiert werden kann.
Lösung:
Um dieses Problem zu lösen, müssen zwei wichtige Punkte berücksichtigt werden:
1. Deklarieren Sie die Accounts-Eigenschaft als Objekt:
Ändern Sie die Deklaration der Accounts-Eigenschaft so, dass sie ein Objekt anstelle einer Liste darstellt.
User.cs (aktualisiert):
<code class="language-c#">public class User { // ... [JsonProperty("accounts")] public Account Accounts { get; set; } }</code>
2. Verwenden Sie das JsonProperty-Attribut:
Wenden Sie das JsonProperty-Attribut auf jede Eigenschaft an, um JSON-Eigenschaftsnamen C#-Eigenschaftsnamen zuzuordnen.
User.cs (unter Verwendung von JsonProperty):
<code class="language-c#">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("accounts")] public Account Accounts { get; set; } }</code>
Zusätzliche Kurse (Konto und Badge):
Definieren Sie zusätzliche Klassen für alle verschachtelten Objekte wie Konten und Ausweise und wenden Sie JsonProperty-Eigenschaften entsprechend an.
Account.cs:
<code class="language-c#">public class Account { [JsonProperty("github")] public string Github { get; set; } }</code>
Badge.cs:
<code class="language-c#">public class Badge { [JsonProperty("name")] public string Name { get; set; } [JsonProperty("description")] public string Description { get; set; } // ... }</code>
Beispielverwendung:
<code class="language-c#">using Newtonsoft.Json; using System.Net; class Program { static User LoadUserFromJson(string response) { var user = JsonConvert.DeserializeObject<User>(response); return user; } static void Main() { using (WebClient wc = new WebClient()) { var json = wc.DownloadString("http://coderwall.com/mdeiters.json"); var user = LoadUserFromJson(json); } } }</code>
Mit diesen Änderungen deserialisiert JsonConvert.DeserializeObject JSON nun erfolgreich in die Benutzer-POCO-Klasse und behandelt verschachtelte Objekte (Konten) entsprechend.
Das obige ist der detaillierte Inhalt vonWie behebe ich JsonConvert.DeserializeObject-Fehler beim Deserialisieren von JSON in C#-POCO-Klassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!