Frage

Ich habe ein XML, das ich in Objekte laden, diese Objekte manipulieren (Werte festlegen, Werte lesen) und diese XMLs dann wieder speichern möchte.Für mich ist es wichtig, das XML in der von mir erstellten Struktur (xsd) zu haben.

Eine Möglichkeit, dies zu tun, besteht darin, meinen eigenen Serialisierer zu schreiben. Gibt es jedoch eine integrierte Unterstützung dafür oder Open Source in C#, die ich verwenden kann?

War es hilfreich?

Lösung

Sie können serializable C # -Klassen aus einem Schema (XSD) erzeugen mit xsd.exe:

xsd.exe dependency1.xsd dependency2.xsd schema.xsd /out:outputDir

Wenn das Schema Abhängigkeiten (im Lieferumfang / importierte Schemas) hat, müssen sie alle auf der gleichen Befehlszeile aufgenommen werden.

Andere Tipps

Dieser Code (C # DotNet 1.0 ab) funktioniert ganz gut, die meisten Objekte zu XML serialisiert. (und zurück) Es funktioniert nicht für Objekte Arraylist enthalten, und wenn möglich Stick nur Arrays mit

using System;    
using System.IO;
using System.Text;
using System.Xml.Serialization;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;


public static string Serialize(object objectToSerialize)
{
    MemoryStream mem = new MemoryStream();          
    XmlSerializer ser = new XmlSerializer(objectToSerialize.GetType());         
    ser.Serialize(mem, objectToSerialize);                      
    ASCIIEncoding ascii = new ASCIIEncoding();
    return ascii.GetString(mem.ToArray());
}        

public static object Deserialize(Type typeToDeserialize, string xmlString)
{
    byte[] bytes = Encoding.UTF8.GetBytes(xmlString);
    MemoryStream mem = new MemoryStream(bytes);         
    XmlSerializer ser = new XmlSerializer(typeToDeserialize);
    return ser.Deserialize(mem);
}

LINQ to XML ist sehr leistungsfähig, wenn Sie verwenden. net 3.5, LINQ to XSD Sie auch nützlich sein können!

Mit xsd.exe Befehlszeilenprogramm, das mit Visual Studio kommt Class-Dateien zu erstellen, die Sie in Ihrem Projekt / Lösung nutzen können, und die System.Xml.Serialization Namespace (speziell die XmlSerializer-Klasse) / serialisiert deserialze diese Klassen zu und von der Festplatte.

mit System.Xml.Serialization;Dieser Namespace verfügt über alle Attribute, die Sie benötigen, wenn Sie Ihre XML-Datei einem beliebigen Objekt zuordnen möchten.Alternativ können Sie das Tool xsd.exe verwenden

xsd file.xsd {/classes | /Dataset} [/Element: Element] [/Sprache: Sprache] [/Namespace: Namespace] [/OutputDir: Verzeichnis] ​​[URI: URI], in dem Ihre XSD -Dateien entnommen und C# oder VB.NET -Klassen aus ihnen erstellt werden.

http://msdn.microsoft.com/en-us/library/x6c1kb0s(VS.71).aspx

Ich bin damit einverstanden xsd ist wirklich Mist ... Aber sie machte eine andere Version, die kaum jemand kennt. Sein genannt xsd Objektgenerator. Es ist die nächste Version und hat viel mehr Möglichkeiten. Es erzeugt Dateien von XSD und arbeitet fantastisch. Wenn Sie ein Schema-Generator wie XML Spion haben; ein XSD aus Ihrem XML erstellen und verwenden Sie dieses Werkzeug. Ich habe sehr, sehr komplexe Klassen erstellt mit diesem Tool. Dann erstellen Sie partielle Klassen für zusätzliche Eigenschaften \ Methoden etc, dann, wenn Sie aktualisieren Sie Ihr Schema, das Sie nur Ihre Klassen und Regeneration aller Änderungen bestehen in den Teilklassen.

http://www.microsoft.com/download/ en / details.aspx? displaylang = en & id = 7075

xsd.exe von Microsoft hat eine Reihe von Fehlern: | Versuchen Sie, diese Open-Source-Perle http://xsd2code.codeplex.com/

Wir haben einen Rahmen geschaffen, kann C # -Klassen aus Ihrem XML automatisch generieren. Es ist ein visuelles Element Vorlage aus, der übergeben Sie Ihre XML und die Klassen werden automatisch in Ihrem Projekt erzeugt. Mit diesen Klassen können Sie erstellen / lesen / schreiben Sie Ihre XML.

Überprüfen Sie diesen Link für das Framework und Visual C # Elementvorlage: klicken Sie hier

Ich wette NetDataContractSerializer können tun, was Sie wollen.

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