c# - net - XML Serialize boolean como 0 y 1
xamarin xml serialization (3)
No, no usar System.Xml.XmlSerializer por defecto: necesitaría cambiar el tipo de datos a un int para lograr eso, o dejar de proporcionar su propio código de serialización (posible, pero no muy divertido).
Sin embargo, simplemente puede postprocesar el XML generado, por supuesto, ya sea usando XSLT, o simplemente usando la sustitución de cadena. Un poco complicado, pero bastante rápido, tanto en tiempo de desarrollo como de ejecución ...
El Esquema XML Parte 2 especifica que una instancia de un tipo de datos que se define como booleano puede tener los siguientes literales legales {verdadero, falso, 1, 0}. El siguiente XML, por ejemplo, cuando se deserializa, establece la propiedad booleana "Emular" en true
.
<root>
<emulate>1</emulate>
</root>
Sin embargo, cuando vuelvo a serializar el objeto al XML, me hago true
lugar del valor numérico. Mi pregunta es, ¿hay alguna manera de que pueda controlar la representación booleana en el XML?
Puede implementar IXmlSerializable que le permitirá alterar la salida serializada de su clase como lo desee. Esto implicará crear los 3 métodos GetSchema (), ReadXml (XmlReader r) y WriteXml (XmlWriter r). Cuando implementa la interfaz, se llama a estos métodos en lugar de .NET tratando de serializar el objeto en sí.
Los ejemplos se pueden encontrar en:
http://www.developerfusion.co.uk/show/4639/ y
http://msdn.microsoft.com/en-us/library/system.xml.serialization.ixmlserializable.aspx
También puedes hacer esto usando algún atributo de magia 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); }
}
¡También puedes usar otros atributos para ocultar este miembro de intellisense si te ofende! No es una solución perfecta, pero puede ser más rápido que implementar IXmlSerializable.