如何在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);