Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 我可以使用System.Text.Json使用私有构造函数反序列化Json吗?_C#_.net Core_System.text.json - Fatal编程技术网

C# 我可以使用System.Text.Json使用私有构造函数反序列化Json吗?

C# 我可以使用System.Text.Json使用私有构造函数反序列化Json吗?,c#,.net-core,system.text.json,C#,.net Core,System.text.json,想知道是否可能有私有构造函数并使用新的System.Text.Json序列化程序 public class MyModel { public string Name { get; set; } public string Data { get; set; } private MyModel() { // use me for when deserializing } public MyModel(string name, st

想知道是否可能有私有构造函数并使用新的System.Text.Json序列化程序

public class MyModel
{
    public string Name { get; set; }
    public string Data { get; set; }

    private MyModel() 
    {
        // use me for when deserializing
    }

    public MyModel(string name, string data)
    {
        Name = name;
        Data = data;
    }
}
简单的往返旅行

var model = new MyModel("doo", "doo");
var json = JsonSerializer.Serialize(model, new JsonSerializerOptions
{
    WriteIndented = true
});

// no to go because of there is no parameterless constructor defined for this object.
var rehydrated = JsonSerializer.Deserialize<MyModel>(json);
var模型=新的MyModel(“doo”、“doo”);
var json=JsonSerializer.Serialize(模型,新的JsonSerializerOptions
{
WriteIndended=true
});
//没有,因为没有为此对象定义无参数构造函数。
var rehydrated=JsonSerializer.Deserialize(json);
它会出现

这是[System.Text.Json]v1的System.Text.Json序列化程序的已知限制。我们计划在将来支持这一点。 -ashonkhan

您可以为此编写一个…对于[ASP.NET Core]3.0版本,在反序列化期间没有计划对调用非默认构造函数的额外支持。这将必须由自定义转换器完成-steveharter


链接的自定义转换器选项允许您使用构建对象所需的任何API,但与Newtonsoft.Json或Entity Framework通过摆弄反射和私有构造函数所能做的不同,因此,可能不是您想要的。

有没有为所有构造函数都是私有的类实现自定义转换器的示例?在.net core 3.1和.net core 5.0之间有着突破性的变化。请参见以下内容-。它还建议在无法添加公共构造函数的情况下实现JsonConverter。