序列化时在 xml 架构 class 中重命名 属性
rename property in xml schema class when serializing
我有一个使用 xsd 生成器工具从 xml 模式自动生成的 c# class 文件。
这个 class 中有一个 属性,我需要在创建 xml 文件时将其从 "Balance" 重命名为 "balance"。
因为这是一个生成的 class 我需要在序列化之前动态更新创建的 xml 对象所以不能只在 class 属性 上添加一个属性使用预期的名称。
我已经通过使用 XmlAttributes class 完成了忽略某些属性的任务,所以我确信我可以为此做一些相同的事情
任何人都可以指出如何实现这一目标的方向吗?
谢谢
假设您需要像这样从 XML 反序列化:
<root>
<Balance />
</root>
然后像这样序列化为XML:
<root>
<balance />
</root>
这里有两个选择:
您可以创建第二个 class,它以各种方式反映您自动生成的 class,除了 [XmlElement("balance")]
上的余额 属性 在镜像 class 中。如果生成的 class 是 XsdGenerated
而镜像的 class 是 CustomClass
,则创建构造函数或覆盖 =
s 运算符以能够填充 CustomClass
以及 XsdGenerated
中的所有字段。当您序列化 CustomClass
时,您应该会得到想要的结果。我认为这是更好的选择。
在 XsdGenerated
上实施 IXmlSerializable
。在 ReadXml
方法中调用 base()
,然后让 WriteXml
方法创建小写的 balance
标签。请注意,此选项可能对 write/maintain 更具挑战性,并且会限制您序列化和反序列化的能力 - 这将是一种单向操作,除非您创建了一个更复杂的机制来设置 ReadXml()
和WriteXml()
应该用大写或小写 b 来对待 balance
。
我已经通过以下方式解决了我的问题:
var overrides = new XmlAttributeOverrides();
overrides.Add(typeof(MyGeneratedCustomType), "Balance", new XmlAttributes { XmlAttribute = new XmlAttributeAttribute("balance") });
var serializer = new XmlSerializer(xmlFile.GetType(), overrides);
MyGeneratedCustomType 是出现在生成的 xsd class 中的一种类型,它包含我需要重命名的 属性。这是一个优雅的解决方案,因为需要的代码非常少。
我有一个使用 xsd 生成器工具从 xml 模式自动生成的 c# class 文件。
这个 class 中有一个 属性,我需要在创建 xml 文件时将其从 "Balance" 重命名为 "balance"。
因为这是一个生成的 class 我需要在序列化之前动态更新创建的 xml 对象所以不能只在 class 属性 上添加一个属性使用预期的名称。
我已经通过使用 XmlAttributes class 完成了忽略某些属性的任务,所以我确信我可以为此做一些相同的事情
任何人都可以指出如何实现这一目标的方向吗?
谢谢
假设您需要像这样从 XML 反序列化:
<root>
<Balance />
</root>
然后像这样序列化为XML:
<root>
<balance />
</root>
这里有两个选择:
您可以创建第二个 class,它以各种方式反映您自动生成的 class,除了
[XmlElement("balance")]
上的余额 属性 在镜像 class 中。如果生成的 class 是XsdGenerated
而镜像的 class 是CustomClass
,则创建构造函数或覆盖=
s 运算符以能够填充CustomClass
以及XsdGenerated
中的所有字段。当您序列化CustomClass
时,您应该会得到想要的结果。我认为这是更好的选择。在
XsdGenerated
上实施IXmlSerializable
。在ReadXml
方法中调用base()
,然后让WriteXml
方法创建小写的balance
标签。请注意,此选项可能对 write/maintain 更具挑战性,并且会限制您序列化和反序列化的能力 - 这将是一种单向操作,除非您创建了一个更复杂的机制来设置ReadXml()
和WriteXml()
应该用大写或小写 b 来对待balance
。
我已经通过以下方式解决了我的问题:
var overrides = new XmlAttributeOverrides();
overrides.Add(typeof(MyGeneratedCustomType), "Balance", new XmlAttributes { XmlAttribute = new XmlAttributeAttribute("balance") });
var serializer = new XmlSerializer(xmlFile.GetType(), overrides);
MyGeneratedCustomType 是出现在生成的 xsd class 中的一种类型,它包含我需要重命名的 属性。这是一个优雅的解决方案,因为需要的代码非常少。