Однако в классах я Я пытаюсь десериализовать. У меня классический случай, когда свойство имеет тип базового класса, например:
Код: Выделить всё
public class ClassToDeserialize
{
public JobBase SomeJob { get; set; }
}
public class JobBase
{
public string JobName { get; set; }
}
Код: Выделить всё
public class OnDemandJob : JobBase
{
public string RequestUser { get; set; }
}
public class ScheduledJob: JobBase
{
public string Schedule { get; set; }
}
Теперь читаем официальную документацию Я был рад обнаружить, что Microsoft подумала об этом и есть статья с примером реализации этого сценария с помощью преобразователей:
https://learn.microsoft.com/en-us/dotne ... stem-text- json-converters-how-to?pivots=dotnet-6-0#support-polymorphic-deserialization
Однако моя проблема заключается в следующем: мне преобразователь, который они реализуют в этом примере, кажется слишком сложным для что для этого нужно сделать. В частности, после выяснения правильного типа они «вручную» создают правильный производный объект, создавая экземпляр, вручную считывая данные JSON и присваивая свойства объекту одно за другим.
Похоже, что для достижения того, чего я хочу, требуется много ручной работы. Интуитивно я думаю, что можно сделать что-то вроде этого (псевдокод):
Код: Выделить всё
public JobBase Read(...)
{
if(jsonObject.HasProperty("Schedule")
{
return JsonSerializer.Deserialize(jsonString);
}
else
{
return JsonSerializer.Deserialize(jsonString);
}
}
Подробнее здесь: https://stackoverflow.com/questions/708 ... -text-json
Мобильная версия