有没有办法指定类型必须失败反序列化除非使用自定义转换器?

时间:2018-06-18 12:35:00

标签: c# json.net

假设我有一个班级Foo,它有一个自定义转换器,

public class FooConverter : JsonConverter { ...

FooConverter存在的原因是普通反序列化器创建的Foo将导致初始化不正确的实例。因此FooConverter必须始终用于序列化/反序列化Foo的实例。

目前,我通过在Foo中使用私有构造函数来实现此目的,该构造函数具有参数:

class Foo
{
    private Foo(int _) {}

    public Foo(string x, string y) : this(0)
    {
        ...

现在尝试让Json.NET与Foo一起使用会产生JsonSerializationException。除非注册并使用FooConverter

但这似乎非常混乱。我假设必须有一种标记类的方法,例如使用属性,告诉Json.NET不反序列化它? All I can find is the ConstructorHandling enum,但没有“不使用非公共构造函数”选项。

我错过了什么,或者我是否必须继续使用“黑客”方法?

1 个答案:

答案 0 :(得分:3)

  

因此FooConverter必须始终用于序列化/反序列化Foo的实例。

然后注释班级:

[JsonConverter(typeof(FooConverter))]
public class Foo
{
}