Heim >Backend-Entwicklung >C++ >Wie kann ich JSON-Feldnamen mit JavaScriptSerializer verschiedenen C#-Objektfeldnamen zuordnen?

Wie kann ich JSON-Feldnamen mit JavaScriptSerializer verschiedenen C#-Objektfeldnamen zuordnen?

Linda Hamilton
Linda HamiltonOriginal
2025-01-10 08:22:41300Durchsuche

How Can I Map JSON Field Names to Different C# Object Field Names Using JavaScriptSerializer?

Verwendung von JavaScriptSerializer für die JSON-Deserialisierung: Herausforderungen bei der Zuordnung von Feldnamen

Problem: Die direkte Deserialisierung von JSON-Daten in ein C#-Objekt mithilfe von JavaScriptSerializer stellt oft eine Herausforderung dar, wenn sich JSON-Feldnamen von C#-Eigenschaftsnamen unterscheiden. Das XmlElement-Attribut löst dieses Zuordnungsproblem nicht.

Szenario:

Nehmen wir an, Sie haben diesen JSON:

<code class="language-json">{"user_id":1234, "detail_level":"low"}</code>

Und diese entsprechende C#-Klasse:

<code class="language-csharp">public class DataObject
{
    public int UserId { get; set; }
    public DetailLevel DetailLevel { get; set; }

    public enum DetailLevel
    {
        Low, /* ... other values */
    }
}</code>

JavaScriptSerializer wird die Felder aufgrund der Namenskonflikte nicht korrekt zuordnen können.

Lösung: Nutzung von DataContractJsonSerializer

Der empfohlene Ansatz besteht darin, stattdessen DataContractJsonSerializer zu verwenden. Dieser Serializer ermöglicht die explizite Zuordnung über das Attribut DataMember.

Modifizierte C#-Klasse:

<code class="language-csharp">using System.Runtime.Serialization;

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

    [DataMember(Name = "detail_level")]
    public string DetailLevel { get; set; } 
}</code>

Hinweis: Die Eigenschaft DetailLevel ist jetzt eine string, um potenzielle Deserialisierungsprobleme mit Aufzählungen zu vermeiden.

Beispielverwendung:

<code class="language-csharp">using System.IO;
using System.Runtime.Serialization.Json;
using System.Text;

// ... within a test method ...

[TestMethod]
public void DataContractJsonSerializerTest()
{
    string jsonData = "{\"user_id\":1234, \"detail_level\":\"low\"}";
    DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(DataObject));
    MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonData)); // UTF8 encoding is crucial
    DataObject dataObject = (DataObject)serializer.ReadObject(ms);

    Assert.IsNotNull(dataObject);
    Assert.AreEqual(1234, dataObject.UserId);
    Assert.AreEqual("low", dataObject.DetailLevel);
}</code>

Dieser Code zeigt, wie DataContractJsonSerializer die JSON-Felder („user_id“, „detail_level“) trotz der Namensunterschiede korrekt den entsprechenden C#-Eigenschaften (UserId, DetailLevel) zuordnet. Denken Sie daran, mögliche Ausnahmen während der Deserialisierung in einer Produktionsumgebung zu behandeln.

Das obige ist der detaillierte Inhalt vonWie kann ich JSON-Feldnamen mit JavaScriptSerializer verschiedenen C#-Objektfeldnamen zuordnen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn