Maison > développement back-end > C++ > Comment puis-je mapper les noms de champs JSON avec différents noms de propriétés .NET à l'aide de JavaScriptSerializer ?

Comment puis-je mapper les noms de champs JSON avec différents noms de propriétés .NET à l'aide de JavaScriptSerializer ?

Linda Hamilton
Libérer: 2025-01-10 08:16:40
original
738 Les gens l'ont consulté

How Can I Map JSON Field Names to Different .NET Property Names Using JavaScriptSerializer?

Gestion des écarts entre les noms de propriétés JSON et .NET avec JavaScriptSerializer

Le JavaScriptSerializer dans .NET nécessite parfois des ajustements lors du mappage des noms de champs JSON aux propriétés de votre objet .NET. Par exemple, un champ JSON tel que « user_id » devra peut-être être mappé à une propriété .NET nommée « UserId ». Personnaliser directement les noms de champs avec JavaScriptSerializer à l'aide d'annotations n'est pas réalisable.

Une solution supérieure : DataContractJsonSerializer

Pour un mappage flexible des noms de champs, DataContractJsonSerializer propose une solution plus robuste. Il exploite l'attribut [DataMember] pour définir explicitement le mappage :

[DataContract]
public class DataObject
{
    [DataMember(Name = "user_id")]
    public int UserId { get; set; }

    [DataMember(Name = "detail_level")]
    public string DetailLevel { get; set; }
}
Copier après la connexion

Ce code garantit que le champ JSON "user_id" remplit correctement la propriété UserId dans votre objet .NET.

Test du DataContractJsonSerializer

Voici un exemple de test unitaire démontrant la fonctionnalité :

using System.Runtime.Serialization.Json;
using System.Text;
using System.IO;
using Microsoft.VisualStudio.TestTools.UnitTesting;

[TestClass]
public class DataContractJsonSerializerTest
{
    [TestMethod]
    public void DataObjectSerializationTest()
    {
        DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(DataObject));
        string jsonData = "{\"user_id\":1234,\"detail_level\":\"low\"}"; //Example JSON

        using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonData)))
        {
            DataObject dataObject = (DataObject)serializer.ReadObject(ms);

            Assert.IsNotNull(dataObject);
            Assert.AreEqual("low", dataObject.DetailLevel);
            Assert.AreEqual(1234, dataObject.UserId);
        }
    }
}
Copier après la connexion

Remarque importante sur les énumérations :

Lorsque vous traitez des énumérations dans la réponse JSON de votre serveur, convertissez-les en chaînes avant la désérialisation avec DataContractJsonSerializer pour éviter d'éventuelles erreurs d'analyse. Le mappage d'énumération direct peut être problématique.

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