Después de tanto trabajar pudimos hallar el arreglo de este asunto que tantos lectores de este sitio han presentado. Si quieres aportar algo más puedes compartir tu conocimiento.
Solución:
Puedes crear una función con el patrón. ShouldSerializePropertyName
que le dice al XmlSerializer si debe serializar el miembro o no.
Por ejemplo, si su propiedad de clase se llama MyNullableInt
podrías tener
public bool ShouldSerializeMyNullableInt()
return MyNullableInt.HasValue;
Aquí hay una muestra completa
public class Person
public string Name get;set;
public int? Age get;set;
public bool ShouldSerializeAge()
return Age.HasValue;
Serializado con el siguiente código
Person thePerson = new Person()Name="Chris";
XmlSerializer xs = new XmlSerializer(typeof(Person));
StringWriter sw = new StringWriter();
xs.Serialize(sw, thePerson);
Da como resultado el siguiente XML: observe que no hay edad
Chris
Además de lo que escribió Chris Taylor: si tienes algo serializado como un attributepuede tener una propiedad en su clase llamada PropertyNameSpecified
para controlar si debe ser serializado. En codigo:
public class MyClass
[XmlAttribute]
public int MyValue;
[XmlIgnore]
public bool MyValueSpecified;
Existe una propiedad llamada XmlElementAttribute.IsNullable
Si la propiedad IsNullable se establece en trueel xsi:nil attribute se genera para los miembros de la clase que se han establecido en un null referencia.
El siguiente ejemplo muestra un campo con el XmlElementAttribute
aplicado a él, y la propiedad IsNullable establecida en false.
public class MyClass
[XmlElement(IsNullable = false)]
public string Group;
Puedes echar un vistazo a otros XmlElementAttribute
para cambiar nombres en serialización, etc.
Si te animas, tienes el poder dejar una noticia acerca de qué le añadirías a este artículo.