source

사용자 지정 JsonConverter에서 기본 직렬화를 사용하는 방법

bestscript 2023. 3. 16. 21:34

사용자 지정 JsonConverter에서 기본 직렬화를 사용하는 방법

Json과 시리얼/디시리얼라이즈하는 복잡한 오브젝트 그래프가 있습니다.NET. 객체 중 일부는 추상 클래스에서 파생되므로 역직렬화가 제대로 작동하려면 커스텀을 만들어야 했습니다.JsonConverter유일한 역할은 탈직렬화 시 추상 클래스의 적절한 구체적인 구현을 선택하고 Json을 허용하는 것입니다.NET은 계속 진행됩니다.

연재를 하고 싶을 때 문제가 발생합니다.커스텀은 전혀 필요 없습니다.나는 내가 사용하는 것과 똑같은 행동을 하고 싶다.JsonConvert.SerializeObject단골손님없이JsonConverter.

단, 디시리얼라이제이션 요구를 위해 커스텀 JsonConverter 클래스를 사용하고 있기 때문에, 이 클래스는WriteJson실행.WriteJson은 추상적이기 때문에 그냥 전화할 수 없습니다.base.WriteJson하지만 나는 근본적으로 그것을 하고 싶다.그래서 궁금한 건 이 방법에 무엇을 넣으면 플레인 제인 디폴트 동작을 얻을 수 있을까?즉, 다음과 같습니다.

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
    // What goes here to get default processing?
}

커스텀에서는 덮어쓰고 false를 반환합니다.

public override bool CanWrite { get { return false; } }

public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
    throw new NotImplementedException();
}

그럼 그냥 예외로 하면 되겠네요WriteJson안 부르니까.

(비직렬화 시 디폴트 동작을 얻으려면 덮어쓰기 후 되돌립니다.false.)

(Json에서 도입된)에도 동일한 접근방식을 사용할 수 있습니다.NET 11.0.1)의 서브클래스에 불과하기 때문에JsonConverter및 의 타입 세이프 버전을 도입하고 있습니다.

언급URL : https://stackoverflow.com/questions/29616596/how-to-use-default-serialization-in-a-custom-jsonconverter