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

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

Barbara Streisand
Barbara Streisand原創
2025-01-24 04:21:381002瀏覽

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

將混合型別值的陣列反序列化為強型別資料

當處理具有特定模式的JSON資料時,將其反序列化為強類型資料類可以提高程式碼的可維護性和清晰度。本問題探討如何在陣列包含混合類型值(特別是整數和字串)時反序列化此類資料。

關鍵考慮因素

反序列化此類資料時,需要考慮兩個關鍵因素:

  1. 處理玩家集合: 玩家資料依使用者名稱索引,包含字串和整數的混合。這表明可以使用字典結構,其中使用者名稱作為鍵,值的集合表示每個玩家的資料。
  2. 未命名的玩家屬性: 玩家資料由特定順序的未命名值組成。我們需要一種機制將這些值指派給Player物件的屬性,確保它們對應到正確的屬性。

自訂轉換器實作

為了解決這些問題,我們可以實作一個自訂反序列化轉換器。此轉換器在C#中實現,利用Newtonsoft.Json中的ObjectToArrayConverter<T>類別:

<code class="language-csharp">public class ObjectToArrayConverter<T> : JsonConverter
{
    // ... (为简洁起见,省略实现细节)
}</code>

Player 類別定義

接下來,我們定義Player類,並使用註解的屬性來指定其反序列化的順序:

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

頂層物件結構

最後,應調整頂級ScoreboardResults類別以將玩家資料表示為字典,其中使用者名稱作為鍵:

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

反序列化示範

使用自訂轉換器和註解的屬性,我們現在可以將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>

結果將是一個填充的ScoreboardResults對象,其中包含一個Player對象的字典,每個對像都包含其各自屬性中預期的值。

This revised output maintains the original image and provides a more concise and technically accurate explanation of the JSON deserialization process. The code examples are also improved for clarity.

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

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