Один из способов десериализации интерфейса и абстрактных свойств - это класс, устанавливающий TypeNameHandling в Auto во время сериализации и десериализации. Однако, когда я пытаюсь то же самое, когда сериализации и десериализации объекта интерфейса напрямую, он не работает -Сериализация интерфейса/абстрактного объекта с использованием NewtonSoft.JSON
interface ISample
{
string Key { get; set; }
}
class A : ISample
{
public string Key { get; set; }
public A(string key)
{
this.Key = key;
}
}
class B : ISample
{
public string Key { get; set; }
public B(string key)
{
this.Key = key;
}
}
сериализации и десериализации код -
ISample a = new A("keyA");
ISample b = new B("keyB");
var settings = new JsonSerializerSettings();
settings.TypeNameHandling = TypeNameHandling.Auto;
var stringA = JsonConvert.SerializeObject(a, settings);
var stringB = JsonConvert.SerializeObject(b, settings);
Console.WriteLine(stringA);
Console.WriteLine(stringB);
a = JsonConvert.DeserializeObject<ISample>(stringA, settings);
b = JsonConvert.DeserializeObject<ISample>(stringB, settings);
Я заметил, что даже при установке TypeNameHandling.Auto информация типа отсутствует в сериализованной строке. Тем не менее, настройки TypeNameHandling для Object или All работают.
Я пропустил что-то основное здесь?
Спасибо, что работал! – ambivi