Benutzerdefinierte Serialisierung mit XmlSerializer
Habe ich eine Klasse, die ich tun müssen, um einige benutzerdefinierte XML-Ausgabe aus, so dass ich implementieren, die die IXmlSerializable-Schnittstelle. Jedoch, einige der Felder, auf die ich ausgeben will mit der Standard-Serialisierung, außer, dass ich ändern wollen, die xml-tag-Namen. Wenn ich Anrufe, serializer.Serialisieren, bekomme ich die Standard-tag-Namen in XML. Kann ich diese irgendwie?
Hier ist mein code:
public class myClass: IXmlSerializable
{
//Some fields here that I do the custom serializing on
...
//These fields I want the default serialization on except for tag names
public string[] BatchId { get; set; }
...
... ReadXml and GetSchema methods are here ...
public void WriteXml(XmlWriter writer)
{
XmlSerializer serializer = new XmlSerializer(typeof(string[]));
serializer.Serialize(writer, BatchId);
... same for the other fields ...
//This method does my custom xml stuff
writeCustomXml(writer);
}
//My custom xml method is here and works fine
...
}
Hier ist mein Xml-Ausgabe:
<MyClass>
<ArrayOfString>
<string>2643-15-17</string>
<string>2642-15-17</string>
...
</ArrayOfString>
... My custom Xml that is correct ..
</MyClass>
Was ich will, am Ende ist:
<MyClass>
<BatchId>
<id>2643-15-17</id>
<id>2642-15-17</id>
...
</BatchId>
... My custom Xml that is correct ..
</MyClass>
Wie oft sind Sie serialisieren / Deserialisieren ? 100s von Zeiten während des app-Lebenszyklus oder nur auf Start / Herunterfahren. Falls ersteres habe ich eine Implementierung, die ist wesentlich flexibler.
Wirklich nur zu serialisieren einmal. Diese Anwendung ist ein einfaches Werkzeug, das zieht Daten aus einer proprietären Datenbank-format und speichert in xml. So bin ich ziehen von Daten in ein Objekt-Modell und dann sofort zu serialisieren. Die meisten der Daten war einfach, so dass ich nicht brauchen, IXmlSerializable zu implementieren...aber dieses Besondere Stück von Daten war ein bisschen wie ein Schmerz.
Nun, dann schau mal hier, der code ist MIT code.google.com/p/videobrowser/source/browse/MediaBrowser/... es ist ein unit-test-wie gut, können Sie haben, um es zu erweitern ein wenig, aber die ganze Architektur ist es. plus für Ihr Szenario es führt VIEL besser als XmlSerializer
Wirklich nur zu serialisieren einmal. Diese Anwendung ist ein einfaches Werkzeug, das zieht Daten aus einer proprietären Datenbank-format und speichert in xml. So bin ich ziehen von Daten in ein Objekt-Modell und dann sofort zu serialisieren. Die meisten der Daten war einfach, so dass ich nicht brauchen, IXmlSerializable zu implementieren...aber dieses Besondere Stück von Daten war ein bisschen wie ein Schmerz.
Nun, dann schau mal hier, der code ist MIT code.google.com/p/videobrowser/source/browse/MediaBrowser/... es ist ein unit-test-wie gut, können Sie haben, um es zu erweitern ein wenig, aber die ganze Architektur ist es. plus für Ihr Szenario es führt VIEL besser als XmlSerializer
InformationsquelleAutor KrisTrip | 2009-12-30
Du musst angemeldet sein, um einen Kommentar abzugeben.
In vielen Fällen können Sie die
XmlSerializer
Konstruktor-überladung, die akzeptiert eineXmlAttributeOverrides
zur Angabe dieser zusätzlichen Informationen zu Namen (zum Beispiel die Verabschiedung einer neuenXmlRootAttribute
) - jedoch funktioniert das nicht bei arrays, soweit ich weiß. Ich erwarte für diestring[]
Beispiel es wäre einfacher, nur schreiben Sie es manuell. In den meisten FällenIXmlSerializable
ist eine Menge zusätzlicher Arbeit - ich vermeide es so weit wie möglich, aus Gründen wie diesem. Sorry.Wie verlockend ist es zu sehen, wenn ich Kurbel die Ausgabe der pb-net xml ;-p
Sie sollten vollständig tun, und machen Sie steckbar, damit die Menschen können die Implementierung Ihrer eigenen Persistenz-format, dann könnten Sie sogar mit sqlite als datenspeicher ...
InformationsquelleAutor Marc Gravell
Können Sie markieren Sie Ihre Felder mit Attributen Kontrolle der serialisierte XML. Zum Beispiel, fügen Sie die folgenden Attribute:
wird wahrscheinlich erhalten Sie dort.
InformationsquelleAutor womp
Falls jemand noch auf der Suche nach diesem können Sie auf jeden Fall nutzen die XmlArrayItem jedoch muss dies eine Eigenschaft in einer Klasse.
Zur besseren Lesbarkeit sollten Sie die plural-und singular des gleichen Wortes.
David
InformationsquelleAutor David Homer