警告——我不是 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/