>백엔드 개발 >C++ >역직렬화 중에 이름이 다른 JSON 필드를 C# 속성에 매핑하려면 어떻게 해야 합니까?

역직렬화 중에 이름이 다른 JSON 필드를 C# 속성에 매핑하려면 어떻게 해야 합니까?

Mary-Kate Olsen
Mary-Kate Olsen원래의
2025-01-10 09:15:42604검색

How Can I Map Differently Named JSON Fields to C# Properties During Deserialization?

C#에서 JavaScriptSerializer.Deserialize을 사용하여 필드 이름 변경

C#의

클래스는 JSON 데이터를 C# 개체로 역직렬화하는 편리한 방법을 제공합니다. 그러나 기본적으로 JSON 필드 이름을 대상 개체의 속성 이름에 직접 매핑합니다. 이로 인해 JSON 필드 이름이 C# 개체의 속성 이름과 일치하지 않으면 역직렬화가 실패할 수 있습니다. JavaScriptSerializer

이 문제를 해결하려면 두 가지 일반적인 방법이 있습니다.

1. 속성 XmlElement을 사용하세요.

이 방법에는

속성을 ​​사용하여 필드 이름 매핑을 수동으로 설정하는 작업이 포함됩니다. 하지만 원본 게시물에서 언급했듯이 [XmlElement]에서는 이 방법이 작동하지 않습니다. 대신 JavaScriptSerializer 속성을 ​​사용하여 필드 이름 매핑을 구현해야 합니다. [DataMember]

2. DataContractJsonSerializer을 사용하세요.

네임스페이스에 제공되는 System.Runtime.Serialization 클래스는 필드 이름 매핑을 위한 보다 강력한 솔루션을 제공합니다. 해당 JSON 필드 이름은 C# 개체 속성에 DataContractJsonSerializer 특성을 적용하여 명시적으로 지정할 수 있습니다. [DataMember]

예:

<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>
이 예에서

user_id JSON 필드 이름은 각각 C# 개체의 detail_levelUserId 속성에 매핑됩니다. DetailLevel

을 사용하여 JSON 데이터를 역직렬화하려면: DataContractJsonSerializer

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

...

DataContractJsonSerializer serializer = new DataContractJsonSerializer(typeof(DataObject));
MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(JsonData));
DataObject dataObject = serializer.ReadObject(ms) as DataObject;</code>

DataContractJsonSerializer 속성을 ​​사용하면 JSON 역직렬화 중에 필드 이름을 효과적으로 변경하여 JSON 데이터와 C# 개체 간의 올바른 매핑을 보장할 수 있습니다. [DataMember]

위 내용은 역직렬화 중에 이름이 다른 JSON 필드를 C# 속성에 매핑하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.