Domanda

Lo schema XML Parte 2 specifica che un'istanza di un tipo di dati definito come booleano può avere i seguenti valori letterali legali {true, false, 1, 0}.Il codice XML seguente, ad esempio, quando deserializzato, imposta la proprietà booleana "Emula" su true.

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

Tuttavia, quando serializzo nuovamente l'oggetto nell'XML, ottengo true invece del valore numerico.La mia domanda è: esiste un modo per controllare la rappresentazione booleana nell'XML?

È stato utile?

Soluzione

Puoi implementare IXmlSerializable che ti consentirà di modificare l'output serializzato della tua classe come preferisci.Ciò comporterà la creazione dei 3 metodi GetSchema(), ReadXml(XmlReader r) e WriteXml(XmlWriter r).Quando si implementa l'interfaccia, vengono chiamati questi metodi anziché .NET che tenta di serializzare l'oggetto stesso.

Esempi possono essere trovati su:

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

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

Altri suggerimenti

Puoi farlo anche utilizzando la magia nera di alcuni attributi XmlSerializer:

[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); }
}

Puoi anche usare altri attributi per nascondere questo membro all'intellisense se ne sei offeso!Non è una soluzione perfetta, ma può essere più rapida rispetto all'implementazione di IXmlSerializable.

No, non utilizzando il System.Xml.XmlSerializer predefinito:dovresti cambiare il tipo di dati in un int per raggiungere questo obiettivo, o divertirti fornendo il tuo codice di serializzazione (possibile, ma non molto divertente).

Tuttavia, puoi semplicemente postelaborare l'XML generato, ovviamente, utilizzando XSLT o semplicemente utilizzando la sostituzione di stringa.Un po' complicato, ma piuttosto veloce, sia in termini di tempo di sviluppo che di esecuzione...

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top