Подтвердить что ты не робот

Как использовать сериализацию по умолчанию в пользовательском 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?
}
4b9b3361

Ответ 1

В пользовательском JsonConverter переопределить CanWrite и вернуть false:

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

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

Тогда вы можете просто выбросить исключение из WriteJson, так как он не будет вызван.