【问题标题】:How to convert xml string to an object using c#如何使用c#将xml字符串转换为对象
【发布时间】:2015-01-22 05:44:27
【问题描述】:

我正在使用 WebRequest 和 WebReponse 类从 Web api 获取响应。我得到的响应是以下格式的xml

<?xml version="1.0" encoding="UTF-8"?>

<ROOT>
    <A></A>
    <B></B>
    <C></C>
    <D>
        <E NAME="aaa" EMAIL="a@a.com"/>
        <E NAME="bbb" EMAIL="b@b.com"/>
    </D>
</ROOT>

我想将所有E 元素作为List&lt;E&gt; 或其他东西。

请有人指导我。

【问题讨论】:

标签: c# asp.net xml-serialization jsonserializer


【解决方案1】:

如果你想避免序列化,因为你只想要 xml 的一个非常特定的部分,你可以用一个 LINQ 语句来做到这一点:

var items = XDocument.Parse(xml)
              .Descendants("E")
              .Select(e => new 
                 {
                    Name = e.Attribute("NAME").Value, 
                    Email = e.Attribute("EMAIL").Value
                 })
              .ToList();

【讨论】:

  • 完美。只是为了添加到他身上,我更喜欢使用.Descendants("D") .Descendants("E"),这样如果在xml输出中的其他任何地方添加元素E,我的代码就不会中断。谢谢
【解决方案2】:

工作示例:

 var doc = XDocument.Parse(@"<?xml version='1.0' encoding='UTF-8'?>
<ROOT>
    <A></A>
    <B></B>
    <C></C>
    <D>
        <E NAME='aaa' EMAIL='a@a.com'/>
        <E NAME='bbb' EMAIL='b@b.com'/>
    </D>
</ROOT>");

            var elements = from el in doc.Elements()
                           from el2 in el.Elements()
                           from el3 in el2.Elements()
                           where el3.Name == "E"
                           select el3;
            foreach (var e in elements)
            {
                Console.WriteLine(e);
            }

【讨论】:

    猜你喜欢
    • 2018-11-27
    • 1970-01-01
    • 2012-07-11
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多