2012-02-24 12 views
8

¿Cómo debo marcar las propiedades, que no se deben serializar si tienen valores predeterminados? Por ejemplo, si tengo un valor booleano, se serializará si solo se establece en verdadero, lo mismo con el valor que se puede nulos, si son nulos, no quiero incluirlos en mi archivo de serialización.¿Cómo se evitan los valores por defecto de serialización?

+0

¿Cuál es el objetivo de esto? –

+0

para tener un archivo serializado más pequeño porque necesito enviarlo a veces a la red gprs donde tengo que pagar por tráfico, de todos modos durante la restauración (deserialización) se establecerán en valor predeterminado si no existen así que ¿cómo evitar serializarlos? – kosnkov

+0

Creo que tendrá que escribir su propio serializador, o posprocesar el resultado del serializador integrado con sus propias reglas. –

Respuesta

22

Ok he encontrado a mí mismo. Es [DefaultValue(false)]. Si marco alguna propiedad con este atributo, entonces se serializará solo si es diferente del valor en().

System.ComponentModel.DefaultValueAttribute

+0

¡Gracias por la solución! ¿Alguna idea de cómo evitar eso? Tengo que poner el valor predeterminado dos veces. '[DefaultValue (" Estado ")] cadena pública statusTag =" Estado ";' – pfuhlert

4

Existe la propiedad especificada. No puedo encontrar documentación msdn, pero this article debería ser útil. Básicamente, usted tiene que escribir algo como esto:

//this property would not be serialized if it contains String.Empty value 
public string PropertyName { get; set; } 


[XmlIgnore] 
public bool PropertyNameSpecified 
{ 
    get { return PropertyName != String.Empty; } 
} 
+0

get {return PropertyName! = String.Empty; } ¿que es eso? Estás comparando bool con string, y cuando agrego xmlIgnore, nunca aparece en el archivo serializado, incluso si esta propiedad no es nula o es verdadera en el caso de bool. – kosnkov

+0

He editado mi respuesta. Espero que esto te dé una comprensión adecuada de lo que está sucediendo allí. –

Cuestiones relacionadas