Heim >Backend-Entwicklung >C++ >Wie deserialisiere ich ein JSON-Array gemischter Daten in stark typisierte C#-Klassen?
Dieser Artikel zeigt, wie man ein JSON-Array mit gemischten Datentypen in stark typisierte C#-Klassen deserialisiert. Die Herausforderung liegt im inkonsistenten Schema des JSON, bei dem die Werte eines Wörterbuchs Arrays unbenannter Elemente sind.
Das Beispiel-JSON sieht so aus:
<code class="language-json">{ "timestamp": 1473730993, "total_players": 945, "max_score": 8961474, "players": { "Player1Username": [ 121, "somestring", 679900, 5, 4497, "anotherString", "thirdString", "fourthString", 123, 22, "YetAnotherString"], "Player2Username": [ 886, "stillAstring", 1677, 1, 9876, "alwaysAstring", "thirdString", "fourthString", 876, 77, "string"] } }</code>
Die Lösung verwendet Newtonsoft.Json und einen benutzerdefinierten Konverter, ObjectToArrayConverter<T>
, um die unbenannten Array-Elemente Eigenschaften in einer Player
-Klasse zuzuordnen. Das JsonProperty
-Attribut mit dem Order
-Parameter ist entscheidend für die korrekte Zuordnung von Array-Elementen zu Klasseneigenschaften basierend auf ihrer Position.
Hier ist eine vereinfachte Darstellung der Schlüsselklassen:
Spielerklasse:
<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 Klasse ObjectToArrayConverter<T>
(Implementierung der Kürze halber weggelassen) verwaltet die Konvertierungslogik. Das Stammobjekt ScoreboardResults
ist so definiert, dass es die gesamte JSON-Struktur enthält:
ScoreboardResults-Klasse:
<code class="language-csharp">public class ScoreboardResults { public int timestamp { get; set; } public int total_players { get; set; } public int max_score { get; set; } public Dictionary<string, Player> players { get; set; } }</code>
Alternativ können DataContract
- und DataMember
-Attribute ähnliche Ergebnisse erzielen, indem sie die Reihenfolge der Eigenschaften angeben. Der Artikel schlägt vor, Demo-Fiddles (Links hier nicht enthalten) zu erkunden, um vollständige Codebeispiele zu erhalten. Dieser Ansatz bewältigt effektiv die Deserialisierung komplexer, inkonsistent strukturierter JSON-Daten in stark typisierte C#-Objekte.
Das obige ist der detaillierte Inhalt vonWie deserialisiere ich ein JSON-Array gemischter Daten in stark typisierte C#-Klassen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!