System.Text.Json的Json.Net JsonConstructor属性替代项

System.Text.Json的Json.Net JsonConstructor属性替代项,json,json.net,deserialization,asp.net-core-3.0,system.text.json,Json,Json.net,Deserialization,Asp.net Core 3.0,System.text.json,在Json.Net中,我们使用JsonConstructor属性来指示应该使用构造函数创建对象的反序列化程序 System.Text.Json中是否有其他选项?请尝试我编写的作为System.Text.Json扩展的库,以提供多态性: 在类上添加命名空间Dahomey.Json.Attributes中定义的[JsonConstructor]属性 public class ObjectWithConstructor { public int Id { get; set; } pub

在Json.Net中,我们使用JsonConstructor属性来指示应该使用构造函数创建对象的反序列化程序


System.Text.Json中是否有其他选项?

请尝试我编写的作为System.Text.Json扩展的库,以提供多态性:

在类上添加命名空间Dahomey.Json.Attributes中定义的[JsonConstructor]属性

public class ObjectWithConstructor
{
    public int Id { get; set; }
    public string Name { get; set; }
    public int Age { get; set; }

    [JsonConstructor]
    public ObjectWithConstructor(int id, string name)
    {
        Id = id;
        Name = name;
    }
}
通过调用JsonSerializerOptions和命名空间Dahomey.json中定义的扩展方法SetupExtensions来设置json扩展。 然后使用常规的Sytem.Text.Json API反序列化类

JsonSerializerOptions options = new JsonSerializerOptions();
options.SetupExtensions();

const string json = @"{""Id"":12,""Name"":""foo"",""Age"":13}";
ObjectWithConstructor obj = JsonSerializer.Deserialize<ObjectWithConstructor>(json, options);
JsonSerializerOptions选项=新建JsonSerializerOptions();
options.SetupExtensions();
常量字符串json=@“{”Id“:12”,“Name“:”foo“,”Age“:13}”;
ObjectWithConstructor obj=JsonSerializer.Deserialize(json,选项);

看起来这是从.NET 5.0预览版8开始添加的:

相关问题:

相关拉动请求:

当前未实现,请参阅3.0版本,在反序列化过程中,没有计划对调用非默认构造函数提供额外支持。这必须由一个自定义转换器来完成。我应该这样回答吗?