Supongamos que tengo este objeto:¿Cómo hacer un tipo de valor anulable con .NET XmlSerializer?
[Serializable]
public class MyClass
{
public int Age { get; set; }
public int MyClassB { get; set; }
}
[Serializable]
public class MyClassB
{
public int RandomNumber { get; set; }
}
XmlSerializer serializa el objeto de esa manera:
<MyClass>
<Age>0</age>
<MyClassB>
<RandomNumber>4234</RandomNumber>
</MyClassB>
</MyClass>
Como puedo tomado la Edad anulable propiedad? IE: ¿para no serializar la propiedad Age cuando está por debajo de 0?
he intentado con la anulable, pero serializar mi objeto de esa manera:
<MyClass>
<Age d5p1:nil="true" />
<MyClassB>
<RandomNumber>4234</RandomNumber>
</MyClassB>
</MyClass>
Mediante la lectura de la documentación de MSDN encontré esto:
No se puede aplicar la propiedad IsNullable a un miembro de mecanografiado como un tipo de valor porque un tipo de valor no puede contener nullNothingnullptra referencia nula (Nothing en Visual Basic). Además, no puede establecer esta propiedad en falso para los tipos de valores que se pueden anotar. Cuando dichos tipos son null No hay referencia nula nula (Nothing en Visual Basic), se serializarán estableciendo xsi: nil en true.
fuente: http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlelementattribute.isnullable.aspx
entiendo un tipo de valor no se puede establecer en nulo. Un tipo de valor siempre se establece en algo. La serialización no puede tomar la decisión de serializarlo o no en función de su valor actual.
Intenté con los atributos, pero no funcionó. Intenté crear un objeto agecontainer y manipular su serialización con atributos, pero no funcionó.
Lo que realmente quiero es:
<MyClass>
<MyClassB>
<RandomNumber>4234</RandomNumber>
</MyClassB>
</MyClass>
Cuando la Edad propiedad está por debajo de 0 (cero).
Parece que tendrá que aplicar la serialización personalizado.
Sí, eso es lo que también pensé, pero me gustaría escapar sin él.
En la aplicación, el objeto es mucho más complejo, y me gustaría no manejar la serialización.
+1 eso es un buen truco! ¿Sabes si es una característica no documentada o si es totalmente compatible? – James
@James que ha estado allí antes de anulables, por lo que debería funcionar bien :) Lo usé hace un tiempo y no tuve ningún problema. – eglasius
¿Pero es una función documentada (y por lo tanto, compatible)? –