我有一个古怪的场景,由于我们使用了.NET 4和C# 4,这似乎是板上钉钉的事情。事实证明,解决方案更加复杂,并且可能不存在于某些完全自定义的解决方案之外。
简而言之,我需要序列化一个动态对象,该对象具有一组固定的、必需的属性和一组任意的可选属性。根元素必须在xmlns属性中包含一个自定义xml命名空间,并且某些子对象可能需要使用不同的xml命名空间。我们的第一种方法是从DynamicObject派生一个自定义类。这允许我们添加一个XmlRootAttribute并指定一个名称空间。除了在动态属性上定义自定义名称空间的复杂性之外,即使是这种简单的方法似乎也不起作用。尽管XmlSerializer被作为要序列化的对象传递了一个dynamic变量,但它只是序列化硬编码的属性,并忽略该对象的任何动态方面。
我们使用JsonFx 2.0已经有一段时间了,并决定试一试。通过对我们的DynamicObject派生进行一些仔细的改进,我们能够让XMLNS2.0序列化所有必要的内容,但是它拒绝序列化任何JsonFx属性。
有没有办法将部分动态对象序列化为xml并包含特定的名称空间?或者这只是一种必须定义任意复杂的对象图的情况,选择适合特定需求的图作为运行时动态派生的图?
当涉及到序列化动态对象时,XML4的序列化故事似乎相当松散。
发布于 2011-08-30 08:04:52
XmlSerializer将在执行查找[XmlElement]及其疯狂兄弟程序所需的任何反射魔术之前检查您的IXmlSerializable实现(如果您实现了它)。只需在实现DynamicObject的同时实现IXmlSerializable,您就应该能够动态地读写任何您喜欢的DynamicObject。
https://stackoverflow.com/questions/7237164
复制相似问题