【问题标题】:Is it possible to serialize a dynamic object graph to xml with specific xml namespaces (xmlns)?是否可以使用特定的 xml 命名空间 (xmlns) 将动态对象图序列化为 xml?
【发布时间】:2011-08-29 23:30:11
【问题描述】:

我有一个时髦的场景,由于我们使用了 .NET 4 和 C# 4,它似乎就在包里。事实证明,该解决方案更复杂,并且在某些完全自定义的解决方案之外可能不存在。

简而言之,我需要序列化一个动态对象,该对象具有一组固定的必需属性和任意一组可选属性。根元素必须在 xmlns 属性中包含自定义 xml 命名空间,并且某些子对象可能需要使用不同的 xml 命名空间。我们的第一种方法是从DynamicObject 派生一个自定义类。这允许我们添加一个XmlRootAttribute 并指定一个命名空间。除非在动态属性上定义自定义命名空间很复杂,否则即使这种简单的方法似乎也不起作用。 XmlSerializer 尽管传递了一个 dynamic 变量作为要序列化的对象,但它只是序列化硬编码的属性,并忽略对象的任何动态方面。

我们使用 JsonFx 2.0 已经有一段时间了,决定试一试。通过对 DynamicObject 衍生品的一些仔细改进,我们能够让 JsonFx 2.0 序列化所有必要的内容,但是它拒绝序列化任何 xmlns 属性。

有没有办法将部分动态的对象序列化为 xml 并包含特定的命名空间?或者这仅仅是必须定义一个任意复杂的对象图的情况,选择适合特定需求的图作为在运行时动态派生的?

在序列化动态对象方面,.NET 4 的 xml 序列化故事似乎相当松懈。

【问题讨论】:

  • 你有没有想出不同的解决方案来解决这个问题?如果是这样,如果你在这里发布它会很好。 :-)
  • 你可以试试这个解决方案:stackoverflow.com/questions/18951521/…

标签: xml c#-4.0 serialization dynamic xml-namespaces


【解决方案1】:

XmlSerializer 将在执行任何它需要查找[XmlElement] 及其疯狂的兄弟姐妹的反射魔法之前戳你的IXmlSerializable 实现(如果你实现它)。只需在 DynamicObject 旁边实现 IXmlSerializable,您应该能够动态地读取和写入任何您喜欢的 XML。

【讨论】:

  • 好的,谢谢你的提示。我希望避免进行任何类型的手动 XML 序列化,因为这会很快变得非常复杂和混乱。
猜你喜欢
  • 2011-09-01
  • 2019-12-15
  • 2011-08-08
  • 2018-02-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-12-07
相关资源
最近更新 更多