Gibt es eine Möglichkeit Objekt (mit seinen Attributen) zu tun, um XML-Serialisierung?

StackOverflow https://stackoverflow.com/questions/390800

  •  23-08-2019
  •  | 
  •  

Frage

Erstellen Sie eine Klasse (nennen wir es FormElement). Diese Klasse sollte einige Eigenschaften wie die Metadaten haben sie mit Datenelemente (Name, Sequenznummer, Wert-das ist nur eine Zeichenfolge, etc).

Diese Klasse hat als Attribute des Typs Validation Application Block Validation Klassen.

Ich will es serialisiert es in XML und deserialisieren. Stellen Sie sicher, dass alle Eigenschaften der Klasse einschließlich der Validierung Anwendungsblock Attribute überleben Serialisierung.

einige Vorschläge?

Keine korrekte Lösung

Andere Tipps

Das .NET-Framework hat diese eingebaut, C # verwenden Sie es wie folgt tun würde:

// This code serializes a class instance to an XML file:
XmlSerializer xs = new XmlSerializer(typeof(objectToSerialize));

using (TextWriter writer = new StreamWriter(xmlFileName))
{
     xs.Serialize(writer, InstanceOfObjectToSerialize);
} 

Und das Snippet ist ein Beispiel dafür, wie eine XML-Datei zurück auf eine Instanz der Klasse deserialisieren:

// this code creates a class instance from the file we just made:
objectToSerialize newObject;
XmlSerializer xs = new XmlSerializer(typeof(objectToSerialize));

using (TextReader reader = new StreamReader(xmlFileName))
{
    newObject = (ObjectToSerialize) xs.Deserialize(reader);
}

Sie müssen Ihre Klasse mit dem Attribut [Serializable] markieren für diese zu arbeiten. Wenn Sie Ihre XML-Ausgabe machen wollen ziemlich ein wenig mehr, können Sie mit [XmlElement] und [XmlAttribute] Attribute auf Ihrer Klasse Eigenschaften haben sie in Ihr Schema der Wahl serialisiert werden.

Mit den Worten serialisiert, meinen Sie die offizielle Serialisierung Mechanismus verwenden, oder einen ähnlichen Effekt erzielen?

Wenn Sie Ihre Objekte Bohnen sind, könnten Sie Reflektion verwenden, um einen allgemeinen Dienst zu schreiben, die eine Klasse nimmt und schreibt seinen Klassennamen und Eigenschaften. Ebenso kann es Materialien aus dem XML lesen und erzeugen das Objekt (das ist, was Apache Faul im Wesentlichen der Fall ist).

Was Jonathon Holland gesagt.

Allerdings bat Sie auch über die Validierung. Wenn Sie den Code verwenden Jonathan geschrieben, alle Ihre Eigenschaften wird serialisieren und Deserialisieren richtig. Aber wenn Sie es wirklich überprüfen mögen, gibt es eine Eigenschaft, die Sie mit Ihrem XmlSerializer-Objekt für ein * XSD-Schema festlegen zu validieren gegen. Sie können das Schema einfach genug von Ihrer Klasse erstellen, indem Sie das xsd.exe Befehlszeilentool verwenden, das mit Visual Studio enthalten ist.

Auch, es klingt wie Sie vielleicht kontrollieren, ob bestimmte Eigenschaften Ihrer Klasse werden als Attribute oder Elemente serialisiert. Jonathon berühren, aber ich möchte ein Beispiel zeigen:

[Serializable]
public class FormElement
{
   [XmlAttribute]
   public string Name {get; set;};

   [XmlAttribute]
   public int Sequence {get; set;};

   [XmlAttribute]
   public string Value {get; set;};

   [XmlElement]
   public Validation OnValidate{get; set;}

   [NonSerialized]
   public string UnimportantProperty {get; set;};

}

Schließlich ist der Typ für jede Eigenschaft, die Sie auch serialisiert werden wollen, müssen serialisierbar sein und komplizierte Typen müssen XmlElements serialisiert werden. Andernfalls werden Sie nicht in der Lage sein, es zu tun.

XStream ist eine ziemlich gute Java-Bibliothek für die genau das tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top