【发布时间】:2019-06-07 00:02:38
【问题描述】:
我的示例代码很简单:
using System.Text.Json.Serialization;
using Newtonsoft.Json;
public class C {
public C(string PracticeName) { this.PracticeName = PracticeName; }
public string PracticeName;
}
var x = new C("1");
var json = JsonConvert.SerializeObject(x); // returns "{\"PracticeName\":\"1\"}"
var x1 = JsonConvert.DeserializeObject<C>(json); // correctly builds a C
var x2 = System.Text.Json.Serialization.JsonSerializer.Parse<C>(json);
最后一行提出:
抛出异常:System.Text.Json.dll 中的“System.NullReferenceException” 对象引用未设置为对象的实例。
我做错了什么?
(请注意,这是最新的 .NET Core 3 预览版 5 和最新的 System.Text.Json 4.6.0-preview6.19259.10)
添加无参数构造函数可以防止异常,但是我不想要/不需要无参数构造函数,没有它,Json.Net 解析得很好。
有没有办法让 System.Text.Json 像 Json.Net 一样使用给定的构造函数进行解析?
【问题讨论】:
-
你试过添加无参构造函数吗?
-
好的,添加无参数构造函数可以防止异常但是我不想要/不需要无参数构造函数,没有它 json.net 解析很好
-
我认为,一般来说,无参数构造函数一直是可序列化类型的先决条件。考虑我熟悉的 .NET 场景。 XML序列化等
-
在我的示例中查看 - Json.NET 没有无参数构造函数没有问题,我也找不到任何需要的文档
-
@BagusTesa,再次如上所示,Json.Net 对我的对象进行淡化没有问题,并且由于只有一个构造函数,因此不需要 [JsonConstructor] 属性
标签: c# .net-core json.net .net-core-3.0 system.text.json