[英]How to Deserialize XMLDocument to object in C#?
我有一個.Net webserivce,它接受字符串格式的XML
。 發送到webserivce的XML
String可以表示系統中的任何Object。 我需要檢查第一個節點,找出反序列化XML字符串的對象。 為此,我將不得不將XML加載到XMLDocument
(不想使用RegEx或字符串比較)。 我想知道是否有一種方法來反序列化XMLDocument/XMLNode
而不是反序列化字符串以節省一些性能? 串行化XMLNode
而不是字符串是否會帶來任何性能優勢?
加載XMLDocument的方法
public void LoadFromString(String s)
{
m_XmlDoc = new XmlDocument();
m_XmlDoc.LoadXml(s);
}
謝謝
如果你有一個XmlDocument
,你可以使用XmlNodeReader
作為XmlReader
傳遞給XmlSerializer
,但我想知道以其他方式做它會更好; 使用XmlReader
得到最外層的元素名稱,並把那個給XmlSerializer
...
[XmlRoot("foo")]
public class Foo
{
[XmlAttribute("id")]
public int Id { get; set; }
}
static class Program
{
static void Main()
{
string xml = "<foo id='123'/>";
object obj;
using (XmlReader reader = XmlReader.Create(new StringReader(xml)))
{
reader.MoveToContent();
switch (reader.Name)
{
case "foo":
obj = new XmlSerializer(typeof(Foo)).Deserialize(reader);
break;
default:
throw new NotSupportedException("Unexpected: " + reader.Name);
}
}
}
}
不要忘記一個強大的競爭者,LINQ to XML!
XElement root = XElement.Load(myfile);
var foos = root.Descendants("Foo").Where(e => e.Attribute("bar") != null);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.