Rumah >pembangunan bahagian belakang >C++ >Bagaimana untuk Memetakan Hartanah JSON Bersarang ke Sifat Kelas dalam C#?

Bagaimana untuk Memetakan Hartanah JSON Bersarang ke Sifat Kelas dalam C#?

Barbara Streisand
Barbara Streisandasal
2025-01-24 23:06:10442semak imbas

How to Map Nested JSON Properties to Class Properties in C#?

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn