C# Xmlserializer/XmlElement 不同的名字

标签 c# xml

有什么方法可以为一个类定义多个元素名称吗?

我的根类

[XmlRoot("part")]
public partial class TERMINAL_Part
{
    public partTerminal terminal { get; set; }

    [XmlAttribute("id")]
    public string id { get; set; }

    [XmlAttribute("version")]
    public string version { get; set; }

}

我不工作的终端子类

public partial class partTerminal
{

    [XmlElement("round")]
    [XmlElement("hf")]
    [XmlElement("box")]
    public partTerminalType Type { get; set; }

}

我的 XML 文件。这里我们有不同的子元素(hf、round、box、...)但是所有的子元素都有相同的子元素。

XML 文件 1

<terminal>
    <hf>
        <part_number>4E0_035_603</part_number>
    </hf>
</terminal>

XML 文件 2

<terminal>
    <round>
        <part_number>4E0_035_603</part_number>
    </round>
</terminal>

XML 文件 3

<terminal>
    <box>
        <part_number>4E0_035_603</part_number>
    </box>
</terminal>    

最佳答案

您可以使用 [XmlChoiceIdentifier] attribute以支持 XML 文件的不同变体。这有点复杂,但这里有一个示例实现供您使用。基本上,我们将为不同的元素名称添加一个 enum,并向您的 partTerminal 添加一个附加属性以标记要使用的特定名称。 (但它不会在 XML 中可见)

首先,您的 partTerminal 将如下所示:

public partial class partTerminal
{
    [XmlChoiceIdentifier("TerminalType")]
    [XmlElement("round")]
    [XmlElement("hf")]
    [XmlElement("box")]
    public partTerminalType Type { get; set; }

    [XmlIgnore]
    public TerminalChoiceType TerminalType { get; set; }
}

请注意添加了 TerminalType[XmlChoiceIdentifier]。在 TerminalType 上使用 [XmlIgnore] 可确保它不会包含在您的 XML 文件中。

我们还需要添加 TerminalChoiceType 枚举,如下所示:

public enum TerminalChoiceType
{
    round,
    hf,
    box
}

您现在可以正常序列化/反序列化它。请注意,您可以辨别 XML 文件中使用了哪种标记,因为 TerminalType 将自动设置为相应的值。反之亦然,在序列化时,如果您希望将其写为 box 值,只需设置 TerminalType = TerminalChoiceType.box,序列化器就会遵守这一点。

关于C# Xmlserializer/XmlElement 不同的名字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32227499/

相关文章:

c# - 复制 RDLC 报告文本并粘贴到记事本中

c# - 如何获取单选按钮的值?

c# - 滚动到底部列表框 Silverlight 时加载更多数据而不是 WP7

java - 解析大型 XML 文件并动态生成 SQL 表

java - 调度程序 servlet 无法连接

c# - 对实体的 linq 内部连接

c# - 从线程中的表单控件获取数据

xml - 未检测到文档的语法约束(DTD 或 XML 模式)

c# - 尝试将具有空属性名称的 JSON 转换为 XML 时出现异常

jquery - 使用 JQuery 解析 XML