Heim > Backend-Entwicklung > C++ > Wie deserialisiere ich ein JSON-Array gemischter Daten in stark typisierte C#-Klassen?

Wie deserialisiere ich ein JSON-Array gemischter Daten in stark typisierte C#-Klassen?

Linda Hamilton
Freigeben: 2025-01-24 04:06:09
Original
551 Leute haben es durchsucht

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.

How to Deserialize a JSON Array of Mixed Data into Strongly Typed C# Classes?

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

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!

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