將具有混合資料類型的 JSON 陣列反序列化為 C# 類別
本指南解決了反序列化 JSON 資料的複雜性,其中結構對直接映射到強類型 C# 類別提出了挑戰。 具體來說,我們將處理涉及看似字典式結構中的混合資料類型陣列的場景。
問題:
常見的 JSON 結構可能會在以下位置呈現資料:
解:
有幾種技術可以克服這些障礙:
1。利用ObjectToArrayConverter
:
Json.NET 的 ObjectToArrayConverter
提供了一個強大的機制來將值陣列對應到 C# 物件的屬性。 這需要仔細考慮屬性順序。
<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>
JsonProperty
屬性的 Order
屬性至關重要;它確保根據數組元素的順序將數組元素正確地映射到屬性。
2。重建根物件:
更直接的方法可能涉及重構根物件以直接表示資料的類似字典的性質。
<code class="language-csharp">public class ScoreboardResults { // ... other properties public Dictionary<string, Player> Players { get; set; } }</code>
這顯著簡化了反序列化,因為字典的鍵和值直接對應於 JSON 結構。
3。自訂轉換器(進階):
對於複雜的場景,自訂 JsonConverter 提供了最多的控制。 這允許針對特定 JSON 結構自訂複雜的解析邏輯。
範例(使用 ObjectToArrayConverter
):
<code class="language-csharp">// Sample JSON (replace with your actual JSON) string jsonString = "..."; // Deserialize using ObjectToArrayConverter var results = JsonConvert.DeserializeObject<ScoreboardResults>(jsonString); // Access player data foreach (var kvp in results.Players) { Console.WriteLine($"{kvp.Key}: {kvp.Value.UniqueID} - {kvp.Value.PlayerDescription}"); }</code>
請記得安裝 Newtonsoft.Json NuGet 套件以獲得 Json.NET 功能。 選擇最適合您的 JSON 結構和複雜性的解決方案。 重構根物件通常提供最簡單且最可維護的解決方案。 ObjectToArrayConverter
是一個強大的工具,適用於需要精確屬性順序控制的更複雜的場景。 僅當其他方法不足時才應考慮自訂轉換器。
以上是如何將混合型別值的 JSON 陣列反序列化為強型別 C# 類別?的詳細內容。更多資訊請關注PHP中文網其他相關文章!