簡體   English   中英

如何在C#中將XMLDocument反序列化為對象?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM