Mappage des noms de champs JSON avec les propriétés des objets .NET
L'analyse des données JSON dans des objets .NET nécessite souvent de mapper les noms de champs JSON aux propriétés d'objet correspondantes. Cela devient crucial lorsque les noms de champs JSON diffèrent des noms de propriétés .NET. Bien que JavaScriptSerializer.Deserialize
puisse sembler pratique, il ne gère pas toujours de manière fiable les incompatibilités de noms. Une solution plus robuste utilise DataContractJsonSerializer
.
Utilisation de DataContractJsonSerializer pour une cartographie fiable
DataContractJsonSerializer
fournit un contrôle précis sur le mappage des noms de champs via l'attribut DataMember
. Voici comment :
<code class="language-csharp">[DataContract] public class DataObject { [DataMember(Name = "user_id")] public int UserId { get; set; } [DataMember(Name = "detail_level")] public string DetailLevel { get; set; } }</code>
Ce code définit une DataObject
classe. L'attribut DataMember
mappe explicitement les champs JSON "user_id" et "detail_level" aux propriétés .NET UserId
et DetailLevel
respectivement.
La désérialisation est alors simple :
<code class="language-csharp">DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(DataObject)); MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(JsonData)); DataObject dataObject = serializer.ReadObject(ms) as DataObject;</code>
Cet extrait de code désérialise les données JSON (JsonData
) dans une instance DataObject
.
Considérations :
DataContractJsonSerializer
offre des capacités de cartographie supérieures à celles de JavaScriptSerializer
, il peut être légèrement plus verbeux.DetailLevel
définies comme des énumérations, un DataContractResolver
personnalisé peut faciliter le mappage des valeurs.DataContractJsonSerializer
est également compatible avec Silverlight.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!