Heim >Backend-Entwicklung >C++ >Wie deserialisiere ich JSON-Arrays mithilfe von JsonConvert.DeserializeObject in C#-Sammlungen?

Wie deserialisiere ich JSON-Arrays mithilfe von JsonConvert.DeserializeObject in C#-Sammlungen?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-15 08:55:45970Durchsuche

How to Deserialize JSON Arrays into C# Collections Using JsonConvert.DeserializeObject?

JSON mit JsonConvert.DeserializeObject in die C#-POCO-Klasse deserialisieren

JsonConvert.DeserializeObject ist ein leistungsstarkes Tool zum Konvertieren von JSON-Daten in C#-Objekte. Beim Versuch, JSON in eine POCO-Klasse (Plain Old CLR Object) zu deserialisieren, die eine Sammlung oder verschachtelte Objekte enthält, kann jedoch ein Fehler auftreten.

Ein häufiges Problem bei der Verwendung von JsonConvert.DeserializeObject ist die Unfähigkeit, ein JSON-Array in eine stark typisierte Sammlung zu deserialisieren. Dieser Fehler ist auf den grundlegenden Unterschied zwischen JSON-Arrays und .NET-Sammlungsstrukturen zurückzuführen.

Problemidentifizierung: Arrays und Objekte

Im bereitgestellten Codeausschnitt ist die Accounts-Eigenschaft als Liste deklariert und erwartet den Empfang eines Arrays von JSON-Objekten, die Benutzerkonten darstellen. Die JSON-Antwort enthält jedoch ein einzelnes Objekt mit mehreren Schlüssel-Wert-Paaren, von denen jedes ein zugehöriges Konto darstellt. Diese Nichtübereinstimmung führt zu dem Fehler „JsonObjectAttribute kann auch zu einem Typ hinzugefügt werden, um die Deserialisierung von einem JSON-Objekt zu erzwingen“.

Problemumgehung: Verwenden Sie benutzerdefinierte Klassen und JsonProperty-Attribute

Um dieses Problem zu lösen, müssen Sie eine benutzerdefinierte Klasse „Account“ definieren, um einzelne Konten darzustellen, und die Accounts-Eigenschaft mit dem Attribut [JsonProperty] annotieren, um den entsprechenden Eigenschaftsnamen in der JSON-Antwort anzugeben:

<code class="language-csharp">public class Account
{
    public string github;
}

[JsonProperty("accounts")]
public Account Accounts { get; set; }</code>

Darüber hinaus kann das JsonProperty-Attribut in der User-Klasse verwendet werden, um Eigenschaften explizit an ihre jeweiligen JSON-Eigenschaftsnamen zu binden und so eine nahtlose Zuordnung sicherzustellen:

<code class="language-csharp">[JsonProperty("username")]
public string Username { get; set; }

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

[JsonProperty("location")]
public string Location { get; set; }</code>

Mit der Implementierung dieser Änderungen kann JsonConvert.DeserializeObject JSON-Antworten problemlos in stark typisierte Benutzerobjekte deserialisieren, einschließlich der Accounts-Eigenschaft, die mit dem entsprechenden zugehörigen Konto gefüllt ist.

Das obige ist der detaillierte Inhalt vonWie deserialisiere ich JSON-Arrays mithilfe von JsonConvert.DeserializeObject in C#-Sammlungen?. 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