c# - 有没有办法检查 ac# 类是否是 json 可序列化和可反序列化的
问题描述
我有一个包含大约 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 completelyWrongPropertyName
,MyProperty
因为OtherImmutableClass
.
有没有一种简单的方法来检查我的模型是否可序列化和可反序列化,而无需为每个类编写 UnitTests?
我正在寻找类似的东西JsonChecker<ImmutableClass>.CanSerializeAndDeserialize();
我已经问过谷歌但没有找到解决方案。
解决方案
推荐阅读
- r - 我可以用 5 个完全独立的 ggplots 模仿 facet_wrap() 吗?
- excel - Excel - 使用同一列生成多个系列折线图
- android - Firebase 函数接收对象而不是字符串
- java - How can I add to a SortedArrayList using BinarySearch and Comparable?
- javascript - Generating an html table using javascript
- python - Extract Data From SVG
- android - 如何在导入模块类的 Android Studio 布局预览中修复“ClassNotFoundException”
- spring-boot - 使用gradle构建时,如何在eclipse之外的spring-boot应用程序中运行可执行jar文件?
- c++ - 使用模板类的成员结构
- android - 尝试通过 AdMob 设置广告时出现“找不到符号方法 loadAd(AdRequest)”