如何使用c#将xml字符串转换为对象
Posted
技术标签:
【中文标题】如何使用c#将xml字符串转换为对象【英文标题】:How to convert xml string to an object using c# 【发布时间】: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<E>
或其他东西。
请有人指导我。
【问题讨论】:
拥有 xml 类并使用 XmlSerialization Deserialize 方法将 xml 转换为新创建的类的对象-msdn.microsoft.com/en-us/library/dsh84875%28v=vs.110%29.aspx 【参考方案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);
【讨论】:
以上是关于如何使用c#将xml字符串转换为对象的主要内容,如果未能解决你的问题,请参考以下文章