【发布时间】:2020-05-26 23:51:18
【问题描述】:
我有以下情况。我把问题简化为下面的例子,虽然我的实际情况比较复杂。
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 Core 程序:
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"
}
牛顿软件
{
"TObject": {
"TObject": {
"CProperty": "C"
},
"BProperty": "B"
},
"AProperty": "A"
}
由于我的应用程序的结构,我不知道B 的泛型参数。我只知道是A<B>。 B 的实际 TObject 直到运行时才知道。
为什么这两种序列化方法不同?有没有办法让 System.Text.Json 完全序列化对象,还是我需要编写自定义转换器?
【问题讨论】:
-
您可以编写自定义转换器或等待 .NET 5 发布
-
因为 JSON.Net 更好
标签: c# .net-core json.net system.text.json