혼합 JSON 배열 및 개체의 C# 역직렬화
이 기사에서는 데이터 구조가 배열이나 객체로 일관되지 않게 나타날 수 있는 Facebook과 같은 소스의 JSON 데이터를 역직렬화하는 문제를 다룹니다. 이러한 상황에서는 표준 JSON.NET 역직렬화가 실패하는 경우가 많습니다.
해결책: 맞춤형 JsonConverter
해결책에는 사용자 정의 JSON.NET 변환기를 만드는 것이 포함됩니다. 이 변환기는 배열 및 개체 형식을 모두 처리하여 일관된 역직렬화를 보장합니다. (자세한 설명은 "사용자 정의 JsonConverter를 사용하여 잘못된 JSON 결과 수정"을 참조하세요.)
사용자 정의 변환기 구현
솔루션의 핵심은 입력 JSON이 단일 개체인 경우에도 대상 유형 목록을 반환하는 사용자 지정 변환기입니다.
속성 속성:
역직렬화된 데이터를 보유할 C# 클래스의 속성은 사용자 지정 변환기로 주석을 달아야 합니다.
<code class="language-csharp">[JsonConverter(typeof(SingleValueArrayConverter<OrderItem>))] public List<OrderItem> Items;</code>
SingleValueArrayConverter
수업:
이 사용자 정의 변환기는 JSON 토큰 유형을 확인하고 적절하게 역직렬화합니다.
<code class="language-csharp">public class SingleValueArrayConverter<T> : JsonConverter { public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) { throw new NotImplementedException(); // Not implemented for this example } public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) { if (reader.TokenType == JsonToken.StartObject) { T instance = (T)serializer.Deserialize(reader, typeof(T)); return new List<T> { instance }; } else if (reader.TokenType == JsonToken.StartArray) { return serializer.Deserialize(reader, objectType); } return null; // Handle other token types as needed } public override bool CanConvert(Type objectType) { return true; // Or add specific type checking here for robustness } }</code>
이 변환기는 JSON 입력이 단일 개체인지 배열인지에 관계없이 결과 C# 속성에 항상 List<T>
이 포함되도록 보장합니다. 프로덕션 용도로 오류 처리(예: 예상치 못한 토큰 유형)를 추가해야 할 수도 있습니다. 이 접근 방식은 목록이 단일 개체 및 배열 JSON 입력 모두에 적합한 데이터 구조일 때 특히 유용합니다. 목록이 적절하지 않은 시나리오에는 대체 솔루션이 필요할 수 있습니다.
위 내용은 사용자 지정 JsonConverter를 사용하여 C#에서 혼합 JSON 배열 및 개체를 역직렬화하려면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!