如何在 C# 中注释我的 XML 以删除数组的父节点?

How do I annotate my XML to remove the parent node of an array in C#?

我有一个集成需要遵循 XML 的特定模式。

其中一个要求是这样的...

<Telecom>
    <TeleType>Mobile</TeleType>
    <TeleNumber>806-611-1111</TeleNumber>
    <TeleType>Home</TeleType>
    <TeleNumber>806-411-9111</TeleNumber>
    <TeleType>Other</TeleType>
    <TeleNumber>806-311-1111</TeleNumber>
</Telecom>

我将模型设置为如下所示:

[XmlArray("Telecom")]
[XmlArrayItem(typeof(Phone))]
public List<Phone> Phones { get; set; }

[XmlRoot("Telecom")]
public class Phone
{
    [XmlElement("TeleType")]
    public string PhoneType { get; set; }

    [XmlElement("TeleNumber")]
    public string Number { get; set; }
}

然而,我收到的输出是:

<Telecom>
    <Phone>
        <TeleType>HOME</TeleType>
        <TeleNumber>801-555-1234</TeleNumber>
    </Phone>
    <Phone>
        <TeleType>WORK</TeleType>
        <TeleNumber>801-123-4321</TeleNumber>
    </Phone>
</Telecom>

如何从中删除 Phone 节点并呈现第一个示例?

注:使用

[XmlElement("Telecom")]
public List<MICAPhone> Phones { get; set; }

也不起作用,因为我有多个电信节点。

我找到了使用Linq to xml的解决方案,希望你能走这条路。请看下面:

// You will have to use System.Xml.Linq library
public class Phone // the only class I have
{
    public string PhoneType { get; set; }
    public string Number { get; set; }
}

public XElement CreateTelecomNode(List<Phone> phones)
{
    var telecom = new XElement("Telecom");
    foreach (var item in phones)
    {
        telecom.Add(new XElement("TeleType", item.PhoneType));
        telecom.Add(new XElement("TeleNumber", item.Number));
    }
    return telecom;
}

带有示例列表的输出: