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

时间:2019-09-28 15:02:56

标签: 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, 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);

2 个答案:

答案 0 :(得分:1)

它会显示the answer is "No," or at least, "Not Yet"

  

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

     

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

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

答案 1 :(得分:0)