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 중국어 웹사이트의 기타 관련 기사를 참조하세요!