>백엔드 개발 >C++ >Json.Net에서 파생 목록 클래스를 직렬화하는 방법은 무엇입니까?

Json.Net에서 파생 목록 클래스를 직렬화하는 방법은 무엇입니까?

Barbara Streisand
Barbara Streisand원래의
2025-01-07 12:56:40436검색

How to Serialize Derived List Classes in Json.Net?

Json.Net에서 파생 목록 클래스 직렬화 문제 이해

다음과 같이 List에서 파생된 클래스로 작업할 때 PagedResult 클래스를 사용하는 경우 Json.Net 직렬화에 문제가 발생할 수 있습니다. 기본적으로 Json.Net은 IEnumerable을 구현하는 클래스를 배열로 처리합니다. 그러나 파생 클래스를 [JsonObject] 및 [JsonProperty] 특성으로 표시하면 목록 자체를 제외하고 파생 클래스의 멤버만 직렬화됩니다.

딜레마 극복: 두 가지 접근 방식

이 문제를 해결하려면 두 가지 옵션이 있습니다.

옵션 1: 목록을 공용 속성으로 노출

파생 클래스에 공용 속성을 생성하여 목록을 노출할 수 있습니다. 예를 들어, PagedResult에서 공개 List 속성을 추가할 수 있습니다. 아이템 {얻기; 세트; }. 이를 통해 파생 클래스 멤버와 목록을 모두 직렬화할 수 있습니다.

옵션 2: 사용자 정의 JsonConverter 활용

또는 처리할 사용자 정의 JsonConverter를 작성할 수도 있습니다. 원하는대로 직렬화. 다음은 PagedResult에 대한 예제 변환기입니다.

class PagedResultConverter<T> : JsonConverter
{
    // Override methods for writing and reading JSON
    // For brevity, only the `WriteJson` method is shown here
    
    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
    {
        PagedResult<T> result = (PagedResult<T>)value;
        // Create a JSON object to represent the PagedResult
        // Add both derived class members and list items to the object
        // Write the object to the writer
    }
}

이 변환기에서는 직렬화 프로세스를 완벽하게 제어하여 파생 클래스 멤버와 목록이 모두 JSON 출력에 포함되도록 합니다.

데모 및 결론

다음은 사용자 정의를 보여주는 데모입니다. 변환기 작동:

// Assume a `PagedResult<string>` class definition
JsonSerializerSettings settings = new JsonSerializerSettings();
settings.Converters.Add(new PagedResultConverter<string>());
string json = JsonConvert.SerializeObject(result, settings);

두 가지 접근 방식 중 하나를 사용하면 파생 클래스 멤버와 목록을 모두 효과적으로 직렬화하여 Json.Net의 직렬화 요구 사항을 충족할 수 있습니다.

위 내용은 Json.Net에서 파생 목록 클래스를 직렬화하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.