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

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

Patricia Arquette
發布: 2025-01-24 04:26:10
原創
921 人瀏覽過

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

將具有固定模式的值數組反序列化到強型別資料類

問題:

將特定格式的 JSON 資料反序列化到強型別資料類時,會面臨挑戰。資料包含一個具有混合字串和整數值的玩家數組,並且玩家類別完全由未命名值組成,且順序固定。

解:

自訂轉換器和資料協定屬性的組合允許高效的反序列化:

  1. 建立自訂轉換器:

    實作一個將物件轉換為陣列的自訂轉換器:

    <code class="language-c#">public class ObjectToArrayConverter<T> : JsonConverter
    {
        // 实现 WriteJson 和 ReadJson 函数
    }</code>
    登入後複製
  2. 將自訂轉換器和資料協定屬性套用至 Player:

    將自訂轉換器套用至 Player 類,並使用資料協定屬性指定其屬性的順序:

    <code class="language-c#">[JsonConverter(typeof(ObjectToArrayConverter<Player>))]
    [DataContract]
    public class Player
    {
        [DataMember(Order = 1)]
        public int UniqueID { get; set; }
        [DataMember(Order = 2)]
        public string PlayerDescription { get; set; }
    }</code>
    登入後複製
  3. 將根物件修改為字典:

    將根物件中 players 屬性的類型變更為字典,使用玩家使用者名稱作為鍵:

    <code class="language-c#">public class ScoreboardResults
    {
        // ...
        public Dictionary<string, Player> players { get; set; }
    }</code>
    登入後複製

範例:

以下程式碼範例示範了使用此解決方案進行反序列化:

<code class="language-c#">using Newtonsoft.Json;

var json = "{...}";
var results = JsonConvert.DeserializeObject<ScoreboardResults>(json);</code>
登入後複製

其他說明:

  • 如果使用資料協定屬性,請記得新增 System.Runtime.Serialization 命名空間的參考。
  • 此解假設具有已知屬性名稱的固定模式。對於動態模式,可能需要更高階的反序列化技術。

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

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