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
Libérer: 2025-01-24 23:06:10
original
442 Les gens l'ont consulté

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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>
Copier après la connexion

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

<code class="language-csharp">Person p = JsonConvert.DeserializeObject<Person>(json);</code>
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal