Maison >développement back-end >C++ >Comment mapper des propriétés JSON imbriquées aux propriétés de classe en C# ?

Comment mapper des propriétés JSON imbriquées aux propriétés de classe en C# ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-24 23:06:10486parcourir

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

Mapper les sous-propriétés des objets JSON aux propriétés de classe

Lorsque vous rencontrez des données JSON avec une structure hiérarchique, vous souhaiterez peut-être mapper les sous-propriétés de l'objet complexe JSON à des propriétés simples de la classe. Bien que le framework Newtonsoft.Json fournisse des attributs [DataMember] pour mapper les données JSON brutes, il ne prend pas en charge nativement les sous-propriétés de mappage.

Cependant, il existe des moyens de réaliser cette cartographie. Une approche simple consiste à désérialiser le JSON en JObject et à utiliser SelectToken pour récupérer les sous-propriétés requises.

Par exemple, considérons les données JSON suivantes :

<code class="language-json">{
    "picture": {
        "id": 123456,
        "data": {
            "type": "jpg",
            "url": "http://www.someplace.com/mypicture.jpg"
        }
    }
}</code>

Pour mapper une sous-propriété url à une propriété ProfilePicture dans une classe, vous pouvez utiliser le code suivant :

<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>

Si vous avez besoin d'une solution plus avancée, vous pouvez implémenter un JsonConverter personnalisé afin que l'attribut JsonProperty fonctionne comme prévu. Ce convertisseur utilisera la réflexion pour remplir toutes les propriétés en fonction du chemin spécifié dans la propriété.

Par exemple, considérons les données JSON suivantes :

<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>

Pour désérialiser JSON et mapper les sous-propriétés vers des propriétés simples dans une classe, vous pouvez utiliser le convertisseur personnalisé suivant :

<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>

Avec un convertisseur personnalisé, vous pouvez désérialiser JSON comme d'habitude :

<code class="language-csharp">Person p = JsonConvert.DeserializeObject<Person>(json);</code>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn