如何在C#中将XMLDocument反序列化为对象?
我有一个.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 = " "; 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);