Peta sub-sifat objek JSON ke sifat kelas
Apabila menemui data JSON dengan struktur hierarki, anda mungkin mahu memetakan subsifat objek kompleks JSON kepada sifat mudah dalam kelas. Walaupun rangka kerja Newtonsoft.Json menyediakan [DataMember]
atribut untuk memetakan data JSON mentah, ia tidak menyokong sub-sifat pemetaan secara asli.
Walau bagaimanapun, terdapat cara untuk mencapai pemetaan ini. Pendekatan yang mudah ialah menyahsiri JSON kepada JObject
dan menggunakan SelectToken
untuk mendapatkan semula subsifat yang diperlukan.
Sebagai contoh, pertimbangkan data JSON berikut:
<code class="language-json">{ "picture": { "id": 123456, "data": { "type": "jpg", "url": "http://www.someplace.com/mypicture.jpg" } } }</code>
Untuk memetakan sub-sifat url
kepada harta ProfilePicture
dalam kelas, anda boleh menggunakan kod berikut:
<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>
Jika anda memerlukan penyelesaian yang lebih maju, anda boleh melaksanakan JsonConverter
tersuai supaya atribut JsonProperty
berfungsi seperti yang diharapkan. Penukar ini akan menggunakan pantulan untuk mengisi semua sifat berdasarkan laluan yang ditentukan dalam harta tersebut.
Sebagai contoh, pertimbangkan data JSON berikut:
<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>
Untuk menyahsiri JSON dan memetakan subsifat kepada sifat mudah dalam kelas, anda boleh menggunakan penukar tersuai berikut:
<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>
Dengan penukar tersuai, anda boleh menyahsiri JSON seperti biasa:
<code class="language-csharp">Person p = JsonConvert.DeserializeObject<Person>(json);</code>
Atas ialah kandungan terperinci Bagaimana untuk Memetakan Hartanah JSON Bersarang ke Sifat Kelas dalam C#?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!