2010-12-11 16 views
1

Ich habe versucht, eine einfache Möglichkeit zum Schreiben von XML mit dem XmlReader/XmlWriter zu finden. Ich mag nicht wirklich die Schnittstelle "IXmlSerializable", aber ich habe keine Wahl für einige meiner Datenklasse.Wie schreibe/schreibe ich ein komplexes Objekt mit XmlWriter/XmlReader

Wie auch immer, was ich tun möchte, ist ganz einfach:

private MyClass myObject; 
public void WriteXml(XmlWriter writer) 
{ 
    writer.WriteObject(myObject); // <-- this method doesn't exists 
} 

So fand ich 2 Arbeit um:

  1. meine eigene Routine schreibt mein Objekt manuell zu schreiben. Ziemlich lächerlich seit .Net macht es schon.
  2. Erstellen Sie einen neuen Serializer mit einem StringWriter und verwenden Sie die WriteValue (string) -Methode.

Ich habe die zweite noch nicht getestet, aber ich denke, es wird wahrscheinlich funktionieren (nicht sicher wegen des ReadValue-Ergebnisses).

Dann ist meine Frage: Vermisse ich etwas wichtiges oder ist es der einzige Weg? Oder gibt es einen besseren Weg, damit umzugehen?

Danke.

+0

Haben Sie sich LINQ to XML angesehen? Das ist ein bisschen oder Arbeit, aber funktioniert ein Vergnügen. – Pieter

+0

Ja, ich kenne die Idee, habe sie aber nie benutzt. Aber hier ist mein Problem, dass mein komplexes Objekt viele Unterobjekte hat und jedes XmlAttributes definiert. Also muss ich diese Attribute lesen. Ich möchte nur nicht blind Elemente schreiben. – Sauleil

Antwort

2

Nachdem ich herumgespielt habe, fand ich etwas ziemlich einfaches. Hier ist der Code, den ich mit für diejenigen spielte, die sich fragen, wie ich mein Problem behoben (ähnlich zum Lesen und Element):

public static void WriteElement(XmlWriter writer, string name, object value) 
    { 
     var serializer = new XmlSerializer(value.GetType(), new XmlRootAttribute(name)); 
     serializer.Serialize(writer, value); 
    } 

Ich weiß nicht, warum ich das Problem war kompliziert wird, aber es kann nicht mehr sein einfacher als das.

0

Verwenden Sie die XmlDocument-Klasse. Es verwendet den XmlNode als Basis für das einfache Schreiben von XML. Sie können eine Klasse auch serialisieren oder die DataSet-Klasse verwenden, um XML auszugeben oder sie in eine Dataset- oder XmlDocument-Typstruktur zurückzulesen.

Verwandte Themen