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:
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>
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>
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>
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!