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