Heim >Backend-Entwicklung >C++ >Wie deserialisiere ich ein JSON-Array mit Werten gemischter Typen in stark typisierte C#-Objekte?
Beim Umgang mit JSON-Daten mit einem bestimmten Schema kann die Deserialisierung in stark typisierte Datenklassen die Wartbarkeit und Klarheit des Codes verbessern. In dieser Frage wird untersucht, wie solche Daten deserialisiert werden, wenn das Array Werte gemischter Typen enthält, insbesondere Ganzzahlen und Zeichenfolgen.
Bei der Deserialisierung dieser Art von Daten sind zwei Schlüsselfaktoren zu berücksichtigen:
Um diese Probleme zu lösen, können wir einen benutzerdefinierten Deserialisierungskonverter implementieren. Dieser Konverter ist in C# implementiert und verwendet die Klasse ObjectToArrayConverter<T>
in Newtonsoft.Json:
<code class="language-csharp">public class ObjectToArrayConverter<T> : JsonConverter { // ... (为简洁起见,省略实现细节) }</code>
Als nächstes definieren wir die Player-Klasse und verwenden annotierte Eigenschaften, um die Reihenfolge anzugeben, in der sie deserialisiert wird:
<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; } // ... (根据需要添加其他属性) }</code>
Schließlich sollte die ScoreboardResults
-Klasse der obersten Ebene angepasst werden, um Spielerdaten als Wörterbuch mit Benutzernamen als Schlüssel darzustellen:
<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>
Mithilfe benutzerdefinierter Konverter und annotierter Eigenschaften können wir jetzt JSON-Daten in stark typisierte Objekte deserialisieren:
<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>Das
-Ergebnis ist ein gefülltes ScoreboardResults
-Objekt, das ein Wörterbuch von Player
-Objekten enthält, die jeweils die erwarteten Werte in ihren jeweiligen Eigenschaften enthalten.
Diese überarbeitete Ausgabe behält das Originalbild bei und bietet eine prägnantere und technisch genauere Erklärung des JSON-Deserialisierungsprozesses. Die Codebeispiele wurden aus Gründen der Klarheit ebenfalls verbessert.
Das obige ist der detaillierte Inhalt vonWie deserialisiere ich ein JSON-Array mit Werten gemischter Typen in stark typisierte C#-Objekte?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!