假设我有一个班级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,但没有“不使用非公共构造函数”选项。
我错过了什么,或者我是否必须继续使用“黑客”方法?
答案 0 :(得分:3)
因此
FooConverter
必须始终用于序列化/反序列化Foo
的实例。
然后注释班级:
[JsonConverter(typeof(FooConverter))]
public class Foo
{
}