> 백엔드 개발 > C++ > C#에서 개체 대신 JSON 속성을 값으로 직렬화/역직렬화하는 방법은 무엇입니까?

C#에서 개체 대신 JSON 속성을 값으로 직렬화/역직렬화하는 방법은 무엇입니까?

Mary-Kate Olsen
풀어 주다: 2024-12-28 11:24:33
원래의
543명이 탐색했습니다.

How to Serialize/Deserialize JSON Properties as Values Instead of Objects in C#?

JSON 속성을 객체 대신 값으로 직렬화/역직렬화: 심층 가이드

많은 애플리케이션에서 데이터는 JSON 형식으로 표현됩니다. 효율적인 저장과 전송을 위해 그러나 때로는 기본 JSON 표현이 원하는 형식과 일치하지 않을 수도 있습니다. 이는 사용자 정의 데이터 유형을 처리할 때 특히 그렇습니다. 이 글에서는 사용자 정의 데이터 유형의 속성을 사용하여 클래스를 직렬화/역직렬화할 때 프로그래머가 직면하는 문제와 이를 극복하는 방법을 살펴보겠습니다.

문제 설명

고려 다음 코드:

class Car
{
    public StringId Id { get; set; }
    public string Name { get; set; }
}

class StringId
{
    public string Value { get; set; }
}
로그인 후 복사

Car 클래스의 객체를 직렬화하려고 할 때 다음 JSON이 예상될 수 있습니다. 표현:

{ "Id": "someId", "Name": "Ford" }
로그인 후 복사

그러나 JSON.NET의 기본 동작은 다른 표현을 가져옵니다.

{ "Id" : { "Value": "someId" }, "Name": "Ford" }
로그인 후 복사

이는 StringId 속성이 단순 속성이 아닌 개체로 직렬화되기 때문입니다. 값.

해결책 1: TypeConverter

이 문제를 해결하는 한 가지 방법은 StringId 클래스에 대한 TypeConverter를 만드는 것입니다. JSON.NET은 개체를 직렬화/역직렬화할 때 이 변환기를 자동으로 감지하고 사용합니다. StringId에 대한 TypeConverter를 구현하는 방법은 다음과 같습니다.

[TypeConverter(typeof(StringIdConverter))]
class StringId
{
    public string Value { get; set; }
}

class StringIdConverter : TypeConverter
{
    // Implementation of CanConvertFrom, CanConvertTo, ConvertFrom, and ConvertTo methods
}
로그인 후 복사

이 TypeConverter를 사용하면 JSON.NET에서 StringId 개체를 문자열로 변환하거나 그 반대로 변환할 수 있습니다.

해결책 2: 사용자 정의 JsonConverter 사용

다른 접근 방식은 사용자 정의를 사용하는 것입니다. JsonConverter. 이를 통해 직렬화/역직렬화 프로세스를 더 효과적으로 제어할 수 있습니다. StringId에 대한 사용자 정의 JsonConverter를 구현하는 방법은 다음과 같습니다.

[JsonConverter(typeof(StringIdConverter))]
class StringId
{
    public string Value { get; set; }
}

class StringIdConverter : JsonConverter
{
    // Implementation of CanConvert, ReadJson, and WriteJson methods
}
로그인 후 복사

이 JsonConverter를 사용하면 StringId 개체가 JSON에서 표현되는 방식을 정확하게 지정할 수 있습니다.

추가 고려 사항

유형 변환기는 .NET Core에서만 지원된다는 점에 유의하는 것이 중요합니다. JSON.NET 10.0.1 이상용. 이전 버전의 경우 사용자 정의 JsonConverters를 대신 사용해야 합니다.

위 내용은 C#에서 개체 대신 JSON 속성을 값으로 직렬화/역직렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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