有没有一种方法来检查C#类是否可以json序列化和反序列化

时间:2020-10-27 15:48:55

标签: c# .net json.net .net-framework-4.8

我有一个大约200个类的项目,需要将其保存为json并在以后反序列化。 所有类都是不可变的,由于这个事实,我需要将所有复杂类型注入构造函数中,否则反序列化将不起作用。因为我使用Clonable基类,所以我没有初始化构造函数中的每个参数。当我忘记向构造函数添加单个类或将其拼写错误时,反序列化将不再起作用,而我知道要检查的唯一方法是使用示例数据编写许多单元测试。

这是重现我的问题的样本:

static void Main(string[] args)
{
    var immutableClass = new ImmutableClass(new OtherImmutableClass(2)).WithAnyProperty(1);
    var jsonString = JsonConvert.SerializeObject(immutableClass, Formatting.Indented);
    var deserializedObject = JsonConvert.DeserializeObject<ImmutableClass>(jsonString);
}

public class ImmutableClass : Clonable<ImmutableClass>
{
    public ImmutableClass(OtherImmutableClass otherImmutableClassInstance)
    {
        OtherImmutableClassInstance = otherImmutableClassInstance;
    }

    public OtherImmutableClass OtherImmutableClassInstance { get; }

    [JsonProperty]
    public int AnyProperty { get; private set; }

    public ImmutableClass WithAnyProperty(int newValue)
    {
        return With(s => s.AnyProperty = newValue);
    }
}

public class OtherImmutableClass
{
    public OtherImmutableClass(int completelyWrongPropertyName)
    {
        MyProperty = completelyWrongPropertyName;
    }

    public int MyProperty { get; }
}

public abstract class Clonable<T> where T : Clonable<T>
{
    protected T With(Action<T> updateAction)
    {
        var clone = (T)MemberwiseClone();
        updateAction(clone);
        return clone;
    }
}

序列化后,我的jsonString的内容符合预期:

{
  "OtherImmutableClassInstance": {
    "MyProperty": 2
  },
  "AnyProperty": 1
}

当我反序列化时,没有引发异常,但是MyProperty是0而不是2,因为completelyWrongPropertyNameMyProperty的构造函数中的OtherImmutableClass不匹配。

是否有一种简单的方法来检查我的模型是否可序列化和可反序列化,而无需为每个类编写UnitTests?

我正在搜索类似JsonChecker<ImmutableClass>.CanSerializeAndDeserialize();

我已经问过Google,但找不到解决方法。

0 个答案:

没有答案