首頁 >後端開發 >C++ >如何將混合資料的 JSON 陣列反序列化為強型別 C# 類別?

如何將混合資料的 JSON 陣列反序列化為強型別 C# 類別?

Linda Hamilton
Linda Hamilton原創
2025-01-24 04:06:09553瀏覽

本文示範如何將包含混合資料類型的 JSON 陣列反序列化為強型別 C# 類別。 挑戰在於 JSON 的架構不一致,其中字典的值是未命名元素的陣列。

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

範例 JSON 如下圖所示:

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

此解決方案使用 Newtonsoft.Json 和自訂轉換器 ObjectToArrayConverter<T> 將未命名陣列元素對應到 Player 類別中的屬性。 帶有 JsonProperty 參數的 Order 屬性對於根據數組元素的位置將數組元素正確地映射到類別屬性至關重要。

這是關鍵類別的簡化表示:

玩家類別:

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

ObjectToArrayConverter<T> 類別(為簡潔起見省略了實作)處理轉換邏輯。 根物件 ScoreboardResults 被定義為保存整個 JSON 結構:

記分板結果類別:

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

或者,DataContractDataMember 屬性可以透過指定屬性的順序來實現類似的結果。 本文建議探索演示小提琴(此處未包含連結)以獲取完整的程式碼範例。 這種方法可以有效地將複雜、結構不一致的 JSON 資料反序列化為強型別 C# 物件。

以上是如何將混合資料的 JSON 陣列反序列化為強型別 C# 類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn