簡介
在 Newtonsoft.Json 中建立自訂反序列化行為可以透過自訂屬性和轉換器來實現。這允許您將 JSON 物件中的子屬性對應到 C# 類別中的簡單屬性,即使它們沒有對應的物件。
使用輔助方法
如果您只需要一個額外的屬性,一個簡單的方法是將您的 JSON 解析為 JObject,使用 ToObject() 填充您的類,然後使用 SelectToken() 來提取額外的屬性。例如:
<code class="language-csharp">string json = @" { ""name"" : ""Joe Shmoe"", ""age"" : 26, ""picture"": { ""id"": 123456, ""data"": { ""type"": ""jpg"", ""url"": ""http://www.someplace.com/mypicture.jpg"" } } }"; JObject jo = JObject.Parse(json); Person p = jo.ToObject<Person>(); p.ProfilePicture = (string)jo.SelectToken("picture.data.url");</code>
建立自訂 JsonConverter
對於更複雜的解決方案,您可以建立一個自訂 JsonConverter,它利用上述技術來處理所有以 JsonProperty 屬性標記的屬性。 JsonConverter 可以使用反射來尋找屬性,將它們對應到正確的 JSON 路徑,並相應地填入屬性。
<code class="language-csharp">class JsonPathConverter : JsonConverter { // ReadJson 实现在此处... }</code>
關聯自訂轉換器
使用 [JsonConverter] 屬性將自訂轉換器與目標類別關聯。然後,您可以將 [JsonProperty] 屬性套用到所需的屬性,並將 JSON 路徑指定為屬性名稱。
<code class="language-csharp">[JsonConverter(typeof(JsonPathConverter))] class Person { [JsonProperty("name")] public string Name { get; set; } [JsonProperty("picture.data.url")] public string ProfilePicture { get; set; } }</code>
使用這些屬性後,您可以像往常一樣反序列化 JSON,映射將自動發生。
以上是如何將巢狀 JSON 屬性對應到簡單的 C# 屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!