2010-11-20 10 views
1

Ich habe eine ObservableCollection Elemente. Ich möchte diese in das XML-Format konvertieren, damit ich sie für die spätere Verwendung speichern kann. Ich bin LINQ etwas neu und bin mir nicht sicher, wie ich das machen soll. Ich weiß, dass ich mich auf das XDocument verlassen muss. Aber ich bin mir nicht sicher, wie ich die Abfrage ausführen und die Ergebnisse in ein String-Format bringen soll.Schreiben CLR-Objekte in XML mit LINQ

Kann jemand bitte einige Hinweise für mich geben? Es scheint nur so eine leichte Aufgabe zu sein, ich wäre überrascht, wenn es nicht möglich wäre.

Vielen Dank,

Antwort

0

Ich bin mir nicht sicher, was Sie wollen. Sie können ein XElement erstellen und es mit der ToString-Methode in eine Zeichenfolge konvertieren. Sie können das gleiche mit XDocument tun.

0

Ich bin überhaupt nicht vertraut mit Silverlight, aber es klingt wie Sie XML-Serialisierung verwenden müssen. Mit der XML-Serialisierung können Sie ein Objekt in eine XML-Repräsentation serialisieren, die Sie später aus XML wieder in ein Objekt deserialisieren können.

Hier sind einige Anleitungen und Informationen über XML-Serialisierung in .NET:

4

Sie Linq to XML benötigen. Ich kann keinen echten Code hier posten, da ich nicht die Struktur Ihrer Daten nicht kennen, aber hier ist ein Dummy-Beispiel:

List<Person> people = ... 

var doc = new XDocument(
      new XElement("People", 
       from p in people 
       select new XElement("Person", 
        new XAttribute("Id", p.Id), 
        new XElement("LastName", p.LastName), 
        new XElement("FistName", p.FirstName)))); 

doc.Save("people.xml"); 

Beachten Sie, dass Linq hier nicht die einzige Option ist. Ein weiterer sehr guter Ansatz ist die XML-Serialisierung.

2

Die Verwendung des DataContractSerializer ist die beste Wahl. Es wurde entwickelt, genau das zu tun, was Sie verlangen.

http://msdn.microsoft.com/en-us/library/system.runtime.serialization.datacontractserializer(v=VS.95).aspx

Vorteile gegenüber XMLSerializer:

  1. Opt-in statt Opt-out-Eigenschaften serialisiert werden. Dies bedeutet, dass Sie angeben, was Sie serialisieren möchten

  2. Da es Opt-in ist, können Sie nicht nur Eigenschaften, sondern auch Felder serialisieren. Sie können sogar nicht öffentliche Mitglieder wie private oder geschützte Mitglieder serialisieren. Und Sie brauchen auch keinen Satz auf einer Eigenschaft (aber ohne einen Setter können Sie serialisieren, aber nicht deserialisieren)

  3. Ist etwa 10% schneller als XmlSerializer, um die Daten zu serialisieren, da Sie nicht die volle Kontrolle darüber haben, wie es ist serialisieren, es gibt eine Menge, die getan werden kann, um den Serialisierungs-/Deserialisierungsprozess zu optimieren.

  4. Kann die SerializableAttribute verstehen und wissen, dass es serialisiert werden muss

  5. Weitere Optionen und Kontrolle über KnownTypes

Nachteile:

  1. keine Kontrolle darüber, wie das Objekt serialisiert außerhalb der Einstellung des Namens und der Reihenfolge
+0

Je nachdem, was Sie benötigen, kann der eine Nachteil größer sein als alle Vorteile zusammen ... –

+0

Wenn Sie .Net zu .Net serialisieren, dann funktioniert es großartig. Verwenden von DataContractSerializer zum Senden von XML an Java; nicht so gut. – rboarman