如何在C#中将XMLDocument反序列化为对象?

Dee*_*zed 8 .net c# xml web-services xml-deserialization

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

加载XMLDocument的方法

public void LoadFromString(String s)
{
    m_XmlDoc = new XmlDocument();
    m_XmlDoc.LoadXml(s);        
}
Run Code Online (Sandbox Code Playgroud)

谢谢

Mar*_*ell 22

如果你有一个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);
            }
        }            
    }
}
Run Code Online (Sandbox Code Playgroud)