當處理具有特定模式的JSON資料時,將其反序列化為強類型資料類可以提高程式碼的可維護性和清晰度。本問題探討如何在陣列包含混合類型值(特別是整數和字串)時反序列化此類資料。
反序列化此類資料時,需要考慮兩個關鍵因素:
為了解決這些問題,我們可以實作一個自訂反序列化轉換器。此轉換器在C#中實現,利用Newtonsoft.Json中的ObjectToArrayConverter<T>
類別:
<code class="language-csharp">public class ObjectToArrayConverter<T> : JsonConverter { // ... (为简洁起见,省略实现细节) }</code>
接下來,我們定義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中文網其他相關文章!