Contextual XmlSerialization
本文关键字:XmlSerialization Contextual | 更新日期: 2023-09-27 18:12:24
是否有办法控制xml序列化,例如检查根/父对象的属性。
我:
class ClassA
{
public int SomeAIntProp {get; set; }
ClassB OtherClass;
}
class ClassB
{
public int SomeBIntProp {get; set; }
}
这就是我想要的:
public bool ShouldSerializeSomeBIntProp(context)
{
return (context is ClassA) && ((ClassA)context).SomeAIntProp >10;
}
}
在任何标准/内置序列化器中都没有。所有的逻辑都必须相对于被序列化的实例(当然你可以遍历任何已经存在的导航属性——.Parent
等——尽管需要标记为[XmlIgnore]
)。唯一的其他选择是实现IXmlSerializable
并手动完成,但我强烈建议不要这样做。
不要在Serialization
中这样做,而只需在类中添加一个函数,该函数首先验证要保存的内容,然后调用具体的序列化函数。
如果你有超过一个对象必须结合和保存在单独的文件中,所以也有一些交叉验证对不同类型的参与序列化的对象,你可以或实现 SerializationAdapter (定制类的结合,验证和序列化对象的利益),或者使用责任链,如果可能的话在你的案例中,有一组函数抛出你的对象必须通过验证,还有一些最终函数,用来验证所有对象上所有函数的最终结果。或多或少像如果你的对象是病人,验证函数是医生,最后你得到一个收据,它基于每一个分析,报告你的最终结果。