序列化时重命名xml架构类中的属性

时间:2015-06-10 12:11:38

标签: c# asp.net xml xml-serialization

我使用xsd生成器工具从xml架构中获得了一个自动生成的c#类文件。

此课程中有一个属性需要重命名为" Balance"到"平衡"什么时候创建xml文件。

由于这是一个生成的类,我需要在seralizing之前动态更新创建的xml对象,因此只能在具有预期名称的class属性上添加atrribute。

我已经完成了通过使用XmlAttributes类来忽略某些属性的任务,所以我确定我可以在同一行中为此做什么

有人能指出我如何实现这个目标吗?

由于

2 个答案:

答案 0 :(得分:1)

我设法通过使用以下方法解决了我的问题:

ffmpeg -i ../m.mp4 -f image2 m.mp4-%04d.bmp

MyGeneratedCustomType是一个出现在生成的xsd类中的类型,它保存了我需要重命名的属性。它是一个优雅的解决方案,因为所需的代码非常少。

答案 1 :(得分:0)

假设你需要像这样从XML反序列化:

<root>
  <Balance />
</root>

然后像这样序列化为XML:

<root>
  <balance />
</root>

这里有两个选项:

  1. 您可以创建第二个类,除了在镜像类的Balance属性上具有[XmlElement("balance")]之外,它会以各种方式镜像自动生成的类。如果生成的类为XsdGenerated且镜像类为CustomClass,则创建构造函数或覆盖= s运算符,以便能够使用来自的所有字段填充CustomClass XsdGenerated。序列化CustomClass时,您应该得到所需的结果。我认为这是更好的选择。

  2. IXmlSerializable上实施XsdGenerated。在base()方法中调用ReadXml,然后让WriteXml方法以小写形式创建balance标记。请注意,此选项可能更难以编写/维护,并且会限制您序列化和反序列化的能力 - 它是单向操作,除非您创建了一个更复杂的机制来设置是否ReadXml()WriteXml()应该使用大写或小写b来处理balance