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

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

Susan Sarandon
發布: 2025-01-24 04:11:08
原創
384 人瀏覽過

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

將具有混合資料類型的 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中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
作者最新文章
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板