使用 XPath 而不是 C# 中属性的固定元素名称进行 XML 反序列化?

问题描述 投票:0回答:1

如果我有这样的xml

<Form_1_1>
    <Body>
        <Code>123</Code>
    </Body>
</Form_1_1>

我可以轻松地将其反序列化为此类结构

[XmlRoot("Form_1_1")]
public class Form_1_1
{
    [XmlElement(ElementName = "Body")]
    public Body Body { get; set; }
}

public class Body
{
    [XmlElement(ElementName = "Code")]
    public string Code { get; set; }
}

但是有什么方法可以映射元素,让我可以跳过

Code
元素直接到达元素
Body
吗?所以基本上将 XML 反序列化为这个对象结构

[XmlRoot("Form_1_1")]
public class Form_1_1
{
    [XmlElement(?????????)] // Something go here?
    public string Code { get; set; }
}

我能想到的唯一可能的方法是使用

XmlElement
属性中的 xpath 而不是固定的元素名称,但这是不允许的。

那么有什么办法可以实现这一点还是根本不可能?

c# xml xml-deserialization
1个回答
0
投票

您可以尝试LINQ to XML API。自 2007 年以来,它在 .Net Framework 中可用。

它非常灵活且功能强大。

c#

void Main()
{
    XDocument xdoc = XDocument.Parse(@"<Form_1_1>
            <Body>
                <Code>123</Code>
            </Body>
        </Form_1_1>");

    Form_1_1 form_1_1 = xdoc.Descendants("Body").Dump()
        .Select(x => new Form_1_1()
        {
            Code = x.Element("Code").Value
        }).SingleOrDefault();
    
    Console.WriteLine(form_1_1);
}

public class Form_1_1
{
    public string Code { get; set; }
}
© www.soinside.com 2019 - 2024. All rights reserved.