C#/.NET XML 序列化程序 - 使用属性作为元素名称

标签 c# .net xml xml-serialization

警告——我不是 xml 专家。

这是我的:

<Fields>
  <Field name="BusinessName" look-up="true">My Business</Field>
  <Field name="BusinessType" look-up="false">Nobody really knows!</Field>
</Fields>

这映射回:

[XmlArrayItem(ElementName = "Field")]
public List<UserInfoField> Fields;

[Serializable, XmlRoot("Field")]
public class UserInfoField
{
    [XmlAttributeAttribute("name")]
    public string Name;

    [XmlText]
    public string Value;

    [XmlAttributeAttribute("look-up")]
    public bool LookUp;
}

有没有办法得到这个序列化输出:

<Fields>
  <BusinessName look-up="true">My Business</BusinessName>
  <BusinessType look-up="false">Nobody really knows!</BusinessType>
</Fields>

我知道这可能过于神奇并且可以想象有一个很好的理由这不应该工作......但我认为它可能并且这是一个问的好地方:)

最佳答案

XmlSerializer(好吧,实际上是所有 Framework 序列化程序) native 序列化类型,而不是名称。属性装饰器让您可以使用名称在前面一点,但这些是静态运行时查找,因此它们不允许您使用该结构插入序列化过程。

相反,您要做的是编写自己的序列化例程。这将允许您覆盖您想要的节点命名顺序——本质上是插入 Name 字段的属性作为您的节点名称。您有兴趣实现 IXmlSerializable界面。请记住,这也会对处理反序列化产生影响。

关于C#/.NET XML 序列化程序 - 使用属性作为元素名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2165733/

相关文章:

C# Parallel.For 创建数组 : OK to put lock() on the array?

.net - 使用 GAC 的优点和缺点是什么?

c# - 此商家已禁用 DPRP。 Paypal 错误

c# - C#中的套接字编程入门-最佳实践

xml - 什么时候应该使用 XSD 文件?

html - 将新闻列表转换为按年和月分组的 HTML 菜单

xml - 如何仅使用 XSL 显示第一个子项

c# - 是否有可靠的方法从字符串中解析用户名和域?

c# - 标准化 sql server 中迄今为止不同格式的 varchar 字段

c# - 如何覆盖默认的必需错误消息