8

XML文字列形式で受け入れる.Net Webサービスがあります。XMLWeb サービスに送信される文字列は、システム内の任意のオブジェクトを表すことができます。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使用できますが、逆にした方がよいのではないでしょうか。an を使用して最も外側の要素名を取得し、それを...に与えます。XmlNodeReaderXmlReaderXmlSerializerXmlReaderXmlSerializer

[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 に答える