Почему сериализатор System.Text Json не сериализует это универсальное свойство, а Json.NET делает?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Почему сериализатор System.Text Json не сериализует это универсальное свойство, а Json.NET делает?

Сообщение Anonymous »

У меня следующая ситуация. Я упростил проблему до следующего примера, хотя моя реальная ситуация сложнее.

System.Text.Json не сериализует объект полностью, но Newtonsoft Json.NET это делает.

Предположим, у меня есть следующая структура классов.

Код: Выделить всё

public class A
{
public string AProperty { get; set; } = "A";
}

public class A : A where T : class, new()
{
public T TObject { get; set; } = new T();
}

public class B
{
public string BProperty { get; set; } = "B";
}

public class B : B where T : class, new()
{
public T TObject { get; set; } = new T();
}

public class C
{
public string CProperty { get; set; } = "C";
}
Вот простая программа .NET Core:

Код: Выделить всё

public class Program
{
private static void Main(string[] args)
{
var obj = new A { TObject = new B() };

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"
}
Из-за структуры моего приложения я не знаю общий параметр B. Я знаю только, что это A. Фактический TObject B неизвестен до момента выполнения.

Почему эти два метода сериализации различаются? Есть ли способ заставить System.Text.Json полностью сериализовать объект или мне нужно написать собственный преобразователь?

Подробнее здесь: https://stackoverflow.com/questions/620 ... ty-but-jso
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»