У меня следующая ситуация. Я упростил задачу в следующем примере, хотя моя реальная ситуация более сложна.
System.Text. Json не сериализует объект полностью, а Newtonsoft Json. NET делает.
Предположим, у меня есть следующая структура классов.
public class A
{
public string AProperty { get; set; } = "A";
}
public class A<T> : A where T : class, new()
{
public T TObject { get; set; } = new T();
}
public class B
{
public string BProperty { get; set; } = "B";
}
public class B<T> : B where T : class, new()
{
public T TObject { get; set; } = new T();
}
public class C
{
public string CProperty { get; set; } = "C";
}
Вот простой. NET Основная программа:
public class Program
{
private static void Main(string[] args)
{
var obj = new A<B> { TObject = new B<C>() };
var systemTextSerialized = JsonSerializer.Serialize(obj);
var newtonsoftSerialized = JsonConvert.SerializeObject(obj);
}
}
Сериализованные результаты выглядят следующим образом:
System.Text. Json
{
"TObject": {
"BProperty": "B"
},
"AProperty": "A"
}
Newtonsoft
{
"TObject": {
"TObject": {
"CProperty": "C"
},
"BProperty": "B"
},
"AProperty": "A"
}
Из-за структуры моего приложения, Я не знаю общий параметр c для B
. Я знаю только, что это A<B>
. Фактическое значение TObject
из B
неизвестно до времени выполнения.
Почему эти два метода сериализации различаются? Есть ли способ получить System.Text. Json для полной сериализации объекта, или мне нужно написать собственный конвертер?