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!