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

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

Barbara Streisand
Barbara StreisandOriginal
2025-01-24 04:21:38997Durchsuche

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

Deserialisieren Sie ein Array von Werten gemischter Typen in stark typisierte Daten

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.

Wichtige Überlegungen

Bei der Deserialisierung dieser Art von Daten sind zwei Schlüsselfaktoren zu berücksichtigen:

  1. Verwaltung von Spielersammlungen: Spielerdaten werden nach Benutzernamen indiziert und enthalten eine Mischung aus Zeichenfolgen und Ganzzahlen. Dies deutet darauf hin, dass es möglich ist, eine Wörterbuchstruktur mit dem Benutzernamen als Schlüssel und einer Sammlung von Werten zu verwenden, die die Daten für jeden Spieler darstellen.
  2. Unbenannte Spielereigenschaften: Spielerdaten bestehen aus einer bestimmten Folge unbenannter Werte. Wir benötigen einen Mechanismus, um diese Werte den Eigenschaften des Player-Objekts zuzuweisen und sicherzustellen, dass sie den richtigen Eigenschaften zugeordnet werden.

Benutzerdefinierte Konverter-Implementierung

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>

Spielerklassendefinition

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>

Objektstruktur der obersten Ebene

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>

Deserialisierungsdemo

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!

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