Heim > Backend-Entwicklung > C++ > Wie deserialisiere ich ein JSON-Array mit Werten gemischter Typen in eine stark typisierte C#-Klasse?

Wie deserialisiere ich ein JSON-Array mit Werten gemischter Typen in eine stark typisierte C#-Klasse?

Susan Sarandon
Freigeben: 2025-01-24 04:11:08
Original
384 Leute haben es durchsucht

How to Deserialize a JSON Array of Mixed-Type Values into a Strongly-Typed C# Class?

JSON-Arrays mit gemischten Datentypen in C#-Klassen deserialisieren

Dieser Leitfaden befasst sich mit der Komplexität der Deserialisierung von JSON-Daten, bei denen die Struktur Herausforderungen für die direkte Zuordnung zu stark typisierten C#-Klassen darstellt. Konkret werden wir Szenarien angehen, die Arrays gemischter Datentypen innerhalb einer scheinbar wörterbuchähnlichen Struktur beinhalten.

Das Problem:

Gemeinsame JSON-Strukturen können Daten darstellen, wo:

  • Unbenannte Arrays: Arrays mit Werten fehlen explizite Eigenschaftsnamen, was eine direkte Deserialisierung schwierig macht.
  • Gemischte Datentypen:Arrays enthalten Elemente unterschiedlichen Typs (z. B. ganze Zahlen, Zeichenfolgen).
  • Wörterbuchähnliche Struktur: Die Gesamtstruktur ähnelt einem Wörterbuch, aber die Werte sind diese problematischen Arrays.

Lösungen:

Mehrere Techniken können diese Hindernisse überwinden:

1. Nutzung ObjectToArrayConverter:

Json.NETs ObjectToArrayConverter bietet einen leistungsstarken Mechanismus zum Zuordnen eines Arrays von Werten zu den Eigenschaften eines C#-Objekts. Dies erfordert eine sorgfältige Prüfung der Eigentumsordnung.

<code class="language-csharp">[JsonConverter(typeof(ObjectToArrayConverter<Player>))]
public class Player
{
    [JsonProperty(Order = 1)]
    public int UniqueID { get; set; }
    [JsonProperty(Order = 2)]
    public string PlayerDescription { get; set; }
    // ... other properties
}</code>
Nach dem Login kopieren

Die JsonProperty-Eigenschaft des Order-Attributs ist entscheidend; Es gewährleistet die korrekte Zuordnung von Array-Elementen zu Eigenschaften basierend auf ihrer Reihenfolge.

2. Umstrukturierung des Stammobjekts:

Ein einfacherer Ansatz könnte darin bestehen, das Stammobjekt so umzustrukturieren, dass es die wörterbuchähnliche Natur der Daten direkt darstellt.

<code class="language-csharp">public class ScoreboardResults
{
    // ... other properties
    public Dictionary<string, Player> Players { get; set; }
}</code>
Nach dem Login kopieren

Dies vereinfacht die Deserialisierung erheblich, da die Schlüssel und Werte des Wörterbuchs direkt der JSON-Struktur entsprechen.

3. Benutzerdefinierter Konverter (Erweitert):

Für komplexe Szenarien bietet ein benutzerdefinierter JsonConverter die größte Kontrolle. Dies ermöglicht eine komplexe Analyselogik, die auf die spezifische JSON-Struktur zugeschnitten ist.

Beispiel (Verwendung von ObjectToArrayConverter):

<code class="language-csharp">// Sample JSON (replace with your actual JSON)
string jsonString = "...";

// Deserialize using ObjectToArrayConverter
var results = JsonConvert.DeserializeObject<ScoreboardResults>(jsonString);

// Access player data
foreach (var kvp in results.Players)
{
    Console.WriteLine($"{kvp.Key}: {kvp.Value.UniqueID} - {kvp.Value.PlayerDescription}");
}</code>
Nach dem Login kopieren

Denken Sie daran, das Newtonsoft.Json NuGet-Paket für die Json.NET-Funktionalität zu installieren. Wählen Sie die Lösung, die am besten zu Ihrer JSON-Struktur und -Komplexität passt. Die Umstrukturierung des Stammobjekts bietet oft die einfachste und wartbarste Lösung. ObjectToArrayConverter ist ein leistungsstarkes Tool für komplexere Szenarien, die eine präzise Kontrolle der Eigentumsordnung erfordern. Ein benutzerdefinierter Konverter sollte nur dann in Betracht gezogen werden, wenn die anderen Methoden nicht ausreichen.

Das obige ist der detaillierte Inhalt vonWie deserialisiere ich ein JSON-Array mit Werten gemischter Typen in eine stark typisierte C#-Klasse?. 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