Frage

Das XML-Schema Teil gibt 2, dass eine Instanz eines Datentyps, der als boolean definiert ist, kann die folgende Rechts Literale {true, false, 1, 0}. Die folgende XML, zum Beispiel, wenn deserialisiert, setzt die boolean-Eigenschaft „emulieren“ zu true.

<root>
    <emulate>1</emulate>
</root>

Allerdings, wenn ich das Objekt wieder in die XML-Serialisierung, erhalte ich true anstelle des numerischen Werts. Meine Frage ist, gibt es eine Möglichkeit, dass ich die Boolesche Darstellung im XML steuern kann?

War es hilfreich?

Lösung

Sie können IXmlSerializable implementieren, die es Ihnen ermöglicht die serialisierte Ausgabe Ihrer Klasse zu ändern, wie Sie wollen. Dies wird zur Folge haben, die 3 Methoden GetSchema Erzeugen (), ReadXml (XmlReader R) und WriteXml (XmlWriter r). Wenn Sie die Schnittstelle implementieren, werden diese Methoden anstelle von .NET aufgerufen versuchen, das Objekt selbst zu serialisieren.

Beispiele finden Sie unter:

http://www.developerfusion.co.uk/show/4639/ und

http://msdn.microsoft.com /en-us/library/system.xml.serialization.ixmlserializable.aspx

Andere Tipps

Sie können dies auch tun, indem Sie einige XmlSerializer mit Attribute schwarze Magie:

[XmlIgnore]
public bool MyValue { get; set; }

/// <summary>Get a value purely for serialization purposes</summary>
[XmlElement("MyValue")]
public string MyValueSerialize
{
    get { return this.MyValue ? "1" : "0"; }
    set { this.MyValue = XmlConvert.ToBoolean(value); }
}

Sie können auch andere Attribute dieses Mitglied von Intellisense zu verbergen, wenn Sie von ihm beleidigt werden! Es ist keine perfekte Lösung, aber es kann schneller sein als die Umsetzung IXmlSerializable.

Nein, nicht mit dem Standard-System.Xml.XmlSerializer: Sie müssen den Datentyp in einen int ändern, das zu erreichen, oder vertrödeln mit Ihrem eigenen Serialisierungscode Bereitstellung (möglich, aber nicht viel Spaß).

Sie können jedoch einfach nachbearbeiten die erzeugte XML statt, natürlich, entweder mit Hilfe von XSLT oder einfach String-Ersetzung verwendet. Ein bisschen wie ein Hack, aber ziemlich schnell, sowohl in der Entwicklungszeit und Laufzeit ...

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