> 백엔드 개발 > C++ > System.Text.Json을 사용하여 적절한 C# 유형을 사용하여 중첩된 JSON을 중첩된 개체 사전으로 역직렬화하는 방법은 무엇입니까?

System.Text.Json을 사용하여 적절한 C# 유형을 사용하여 중첩된 JSON을 중첩된 개체 사전으로 역직렬화하는 방법은 무엇입니까?

Linda Hamilton
풀어 주다: 2024-12-25 02:40:17
원래의
987명이 탐색했습니다.

How to Deserialize Nested JSON to a Nested Dictionary of Objects with Proper C# Types Using System.Text.Json?

적절한 C# 유형을 사용하여 중첩 JSON을 중첩 객체 사전으로 역직렬화

C# .Net Core 3.1에서 System.Text.Json을 사용하여 역직렬화 Dictionary에 중첩된 JSON 개체 모든 객체가 JsonElement가 될 수 있습니다. 그러나 각 JSON 속성 유형에 대해 적절한 C# 유형을 얻기 위해 역직렬화 프로세스를 사용자 정의할 수 있습니다.

Custom JsonConverter: ObjectAsPrimitiveConverter

System.Text.Json에는 기본이 부족합니다. 자유 형식 JSON을 기본 유형으로 역직렬화하려면 사용자 정의 JsonConverter가 필요합니다. ObjectAsPrimitiveConverter는 다음 기능을 제공합니다.

  • 문자열 변환: JSON 문자열 속성을 C# 문자열로
  • 숫자 변환: C#에 대한 JSON 숫자 속성 int/double
  • 객체 변환: JSON 객체 속성을 Dictionary

코드 구현:

public class ObjectAsPrimitiveConverter : JsonConverter<object>
{
    // Configure converter settings (float format, unknown number handling, object format)
    ...

    public override void Write(Utf8JsonWriter writer, object value, JsonSerializerOptions options)
    {
        // Handle custom serialization if needed
    }

    public override object Read(ref Utf8JsonReader reader, Type typeToConvert, JsonSerializerOptions options)
    {
        // Handle custom deserialization based on token type
    }
}
로그인 후 복사

구성 및 사용법:

사용자 정의 변환기를 사용하려면 ObjectAsPrimitiveConverter로 JsonSerializerOptions를 구성하고 원하는 설정을 지정합니다.

var options = new JsonSerializerOptions
{
    Converters = { new ObjectAsPrimitiveConverter() },
    WriteIndented = true,
};

// Deserialize to object or dynamic
dynamic d = JsonSerializer.Deserialize<dynamic>(json, options);
로그인 후 복사

참고:

  • 변환기는 가장자리를 처리합니다. 임의의 정밀도를 갖는 숫자와 같은 경우 기본 C# 유형에 맞지 않을 수 있습니다. 이러한 숫자에 대한 오류 처리 또는 JsonElement 반환을 위한 옵션을 제공합니다.
  • 다른 부동 소수점 형식(이중/십진수) 및 개체 표현(Dictionary 또는 ExpandoObject)을 사용하도록 변환기를 구성할 수 있습니다.
  • 데모 바이올린을 참조할 수 있습니다.

위 내용은 System.Text.Json을 사용하여 적절한 C# 유형을 사용하여 중첩된 JSON을 중첩된 개체 사전으로 역직렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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