將 JSON 物件的子屬性對應到類別屬性
當遇到具有分層結構的 JSON 資料時,您可能想要將 JSON 複雜物件的子屬性對應到類別中的簡單屬性。雖然 Newtonsoft.Json 框架提供 [DataMember]
屬性來映射原始 JSON 數據,但它本身並不支援映射子屬性。
然而,有一些方法可以實現這種映射。一個簡單的方法是將 JSON 反序列化為 JObject
,並使用 SelectToken
來檢索所需的子屬性。
例如,考慮以下 JSON 資料:
<code class="language-json">{ "picture": { "id": 123456, "data": { "type": "jpg", "url": "http://www.someplace.com/mypicture.jpg" } } }</code>
要將 url
子屬性對應到類別中的 ProfilePicture
屬性,可以使用以下程式碼:
<code class="language-csharp">string json = @" { ""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
,使 JsonProperty
屬性能夠如預期般運作。此轉換器將使用反射根據屬性中指定的路徑填入所有屬性。
例如,考慮以下 JSON 資料:
<code class="language-json">{ "name": "Joe Shmoe", "age": 26, "picture": { "id": 123456, "data": { "type": "jpg", "url": "http://www.someplace.com/mypicture.jpg" } }, "favorites": { "movie": { "title": "The Godfather", "starring": "Marlon Brando", "year": 1972 }, "color": "purple" } }</code>
要反序列化 JSON 並將子屬性對應到類別中的簡單屬性,可以使用以下自訂轉換器:
<code class="language-csharp">[JsonConverter(typeof(JsonPathConverter))] class Person { [JsonProperty("name")] public string Name { get; set; } [JsonProperty("age")] public int Age { get; set; } [JsonProperty("picture.data.url")] public string ProfilePicture { get; set; } [JsonProperty("favorites.movie")] public Movie FavoriteMovie { get; set; } [JsonProperty("favorites.color")] public string FavoriteColor { get; set; } }</code>
有了自訂轉換器,您可以像往常一樣反序列化 JSON:
<code class="language-csharp">Person p = JsonConvert.DeserializeObject<Person>(json);</code>
以上是如何在 C# 中將巢狀 JSON 屬性對應到類別屬性?的詳細內容。更多資訊請關注PHP中文網其他相關文章!