2010-04-22 17 views
8

Ich habe eine .Net Webserver, die XML im String-Format akzeptiert. XML Der String, der in die Webservices gesendet wird, kann ein beliebiges Objekt im System darstellen. Ich muss den ersten Knoten überprüfen, um herauszufinden, welches Objekt die XML-Zeichenfolge deserialisiert. Dazu muss ich die XML in eine XMLDocument laden (RegEx oder String-Vergleich nicht verwenden wollen). Ich frage mich, ob es einen Weg zur Deserialisierung der XMLDocument/XMLNode eher das Deserialisieren der Zeichenfolge gibt, um etwas Leistung zu speichern? Wird es irgendeinen Leistungsvorteil geben Serialisierung der XMLNode eher, dass die Zeichenfolge?Wie XML-Dokument in C# zu Objekt deserialisieren?

Methode zum Laden XMLDocument

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

Dank

Antwort

22

Wenn Sie eine XmlDocument haben, Sie XmlNodeReader als XmlReader passieren zu XmlSerializer verwenden können, aber ich frage mich, ob es besser wäre, es zu tun, um die andere Weise; verwenden, um ein XmlReader die äußersten Elementnamen zu bekommen, und gibt dass-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); 
      } 
     }    
    } 
} 
+0

Verdammt, endlich eine Frage, die ich mit geschlossenen Augen beantworten konnte, Sie haben mich dazu geschlagen :). – johnc

+0

Danke, ich werde es versuchen. – Deepfreezed

2

Sie einen leistungsstarken Anwärter nicht vergessen, LINQ to XML!

+0

Anwendung, an der ich arbeite, steckt auf .Net 2.0 fest. Ich wünschte, das wäre nicht der Fall. – Deepfreezed

+0

Vergessen Sie nicht, System.Xml.Linq zu den Referenzen Ihres Programms hinzuzufügen –

Verwandte Themen