8

XML我有一个接受字符串格式的 .Net 网络服务。XML发送到网络服务的字符串可以代表系统中的任何对象。我需要检查第一个节点以确定要反序列化 XML 字符串的对象。为此,我必须将 XML 加载到一个XMLDocument(不想使用 RegEx 或字符串比较)中。我想知道是否有一种方法可以反序列化XMLDocument/XMLNode而不是反序列化字符串以节省一些性能?XMLNode序列化而不是字符串会有任何性能优势吗?

加载 XMLDocument 的方法

public void LoadFromString(String s)
{
    m_XmlDoc = new XmlDocument();
    m_XmlDoc.LoadXml(s);        
}

谢谢

4

2 回答 2

22

如果你有一个XmlDocument,你可以XmlNodeReader用作XmlReader传递给XmlSerializer,但我想知道用另一种方式做会不会更好;使用 anXmlReader获取最外层的元素名称,并将赋予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);
            }
        }            
    }
}
于 2010-04-22T22:08:54.587 回答
2

不要忘记一个强大的竞争者,LINQ to XML!

XElement root = XElement.Load(myfile);

var foos = root.Descendants("Foo").Where(e => e.Attribute("bar") != null);
于 2010-04-22T23:45:20.143 回答