Maison >développement back-end >C++ >Puis-je mapper les propriétés JSON enfants aux propriétés de classe à l'aide d'attributs ?
Utilisez l'attribut pour accéder aux sous-attributs dans JSON?
par newtonsoft.json permet DeserializeObject<T>
de mapper les données JSON d'origine à l'attribut de classe. Cependant, si vous souhaitez cartographier les sous-attributs des objets JSON complexes aux attributs simples de la classe, que dois-je faire? [DataMember(Name = "raw_property_name")]
<code class="language-json">{ "picture": { "id": 123456, "data": { "type": "jpg", "url": "http://www.someplace.com/mypicture.jpg" } } }</code>Vous pouvez uniquement vous intéresser aux attributs
de l'objet , vous ne voulez donc pas créer d'objets complexes dans la classe. Pouvez-vous le refléter simplement comme ça? picture
url
<code class="language-csharp">[DataMember(Name = "picture.data.url")] public string ProfilePicture { get; set; }</code>
Une méthode simple consiste à analyser JSON comme . Ensuite, utilisez
pour remplir votre classe de. Pour extraire des attributs supplémentaires, veuillez utiliser JObject
: ToObject()
JObject
SelectToken()
JSONConverr
<code class="language-csharp">string json = @" { ""name"" : ""Joe Shmoe"", ""age"" : 26, ""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>personnalisé
ou, vous pouvez créer un personnalisé pour activer l'attribut pour mappore l'attribut en fonction de vos besoins:
JsonConverter
La méthode d'utilisation est la suivante: JsonProperty
<code class="language-csharp">class JsonPathConverter : JsonConverter { // ... 实现代码在问题答案中提供 ... }</code>Cela vous permet d'utiliser le mappage basé sur l'attribut pour les sous-attributs, afin de fournir une plus grande flexibilité lors de la sérialisation des données JSON dans des objets de classe.
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!