5

想知道是否可能拥有私有构造函数并使用新的 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);
4

2 回答 2

3

看起来答案是“否”,或者至少是“还没有”

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

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

链接的自定义转换器选项将允许您使用构建对象所需的任何 API 但与 Newtonsoft.Json 或实体框架可以通过摆弄反射和私有构造函数来执行的操作不同,所以可能不是你在找什么。

于 2019-11-25T19:26:10.237 回答
-1

您需要使用 JsonConstructor 属性

检查下面的链接

https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-immutability?pivots=dotnet-5-0

于 2021-07-13T14:58:45.233 回答