> 백엔드 개발 > C++ > JSON.NET에서 선택적 배열 및 개체를 사용하여 JSON을 역직렬화하는 방법은 무엇입니까?

JSON.NET에서 선택적 배열 및 개체를 사용하여 JSON을 역직렬화하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2025-01-12 19:07:44
원래의
276명이 탐색했습니다.

How to Deserialize JSON with Optional Arrays and Objects in JSON.NET?

JSON.NET에서 선택적 배열 및 객체의 역직렬화 처리

JSON.NET 라이브러리를 사용하여 Facebook에서 반환된 데이터를 처리할 때 JSON 구조가 변경될 수 있습니다. 일부 속성은 배열로 표시되기도 하고 객체로 표시되기도 합니다. 이로 인해 역직렬화 문제가 발생할 수 있습니다.

질문

일부 Facebook 게시물은 다음 형식으로 JSON을 반환할 수 있으며 이로 인해 역직렬화가 실패할 수 있습니다.

<code class="language-json">"attachment": {
    "media":{},
    "name":"",
    "caption":"",
    "description":"",
    "properties":{},
    "icon":"http://www.facebook.com/images/icons/mobile_app.gif",
    "fb_object_type":""
},
"permalink":"http://www.facebook.com/1234"</code>
로그인 후 복사

솔루션

이 문제를 해결하려면 JsonConverter 클래스를 사용하여 사용자 정의 JSON 변환기를 구현할 수 있습니다. 이 변환기는 특정 속성의 배열 및 개체 구조를 처리합니다.

사용자 정의 JSON 변환기

다음 사용자 정의 변환기 SingleValueArrayConverter는 단일 개체를 목록으로 변환하여 속성을 올바르게 역직렬화할 수 있도록 합니다.

<code class="language-csharp">public class SingleValueArrayConverter<T> : JsonConverter
{
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        throw new NotImplementedException();
    }

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
    {
        object retVal;
        if (reader.TokenType == JsonToken.StartObject)
        {
            T instance = (T)serializer.Deserialize(reader, typeof(T));
            retVal = new List<T>() { instance };
        }
        else if (reader.TokenType == JsonToken.StartArray)
        {
            retVal = serializer.Deserialize(reader, objectType);
        }
        else
        {
            retVal = null; // 处理其他情况,例如空值
        }
        return retVal;
    }

    public override bool CanConvert(Type objectType)
    {
        return true;
    }
}</code>
로그인 후 복사

사용방법

사용자 정의 변환기를 사용하려면 대상 클래스의 속성에 JsonConverter 속성으로 주석을 답니다.

<code class="language-csharp">[JsonConverter(typeof(SingleValueArrayConverter<OrderItem>))]
public List<OrderItem> Items { get; set; }</code>
로그인 후 복사

이를 통해 JSON.NET은 Items 속성의 배열과 객체 구조를 처리하여 역직렬화 문제를 해결할 수 있습니다. get; set; 추가 및 else 사례 처리를 통해 더욱 강력해졌습니다.

위 내용은 JSON.NET에서 선택적 배열 및 개체를 사용하여 JSON을 역직렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿