2010-03-05 12 views
5

Tengo pocos archivos .cs generados por xsd.exe mediante un esquema XSD.Las clases generadas xsd.exe no serializan los atributos de valor predeterminados

Mi problema es que cuando trato de serializar esas clases a xml, los atributos cuyos valores coinciden con los valores predeterminados definidos en el esquema xsd no se están serializando.

Descubrí que mi problema se resuelve cuando elimino el atributo [System.ComponentModel.DefaultValueAttribute(typeof(<someType>), "<SomeValue>")] para el miembro que representa un campo predeterminado.

Así que mi pregunta no es la forma más elegante de hacer esto? Por ejemplo, ¿hay alguna manera de especificar que deseo que los valores predeterminados se serialicen de todos modos?

Respuesta

4

Las versiones cortas son: sí. parece que ese es el enfoque más simple.

He intentado las cosas "obvias" (en particular, los patrones *Specified y ShouldSerialize* que XmlSerializer soportes, sino también IsNullable) y que sólo sigue sin incluir el valor.

Las siguientes opciones serían IXmlSerializable (que es completamente dura) o XmlAttributeOverrides (una duplicación de esfuerzo), ninguna de las cuales es particularmente atractiva aquí. Me pregunto si su enfoque actual es menos trabajo? Por supuesto, puede simplemente exportar el WSDL y editarlo para eliminar el valor predeterminado (y generar a partir de la versión editada).

Como un aparte - si esto era WCF, existe el [DataMember(EmitDefaultValue = ...)] que hace controla esto; tal vez lo agregaron como una solicitud de función?

+0

Gracias por su respuesta. De hecho, mi enfoque actual es menos trabajo, a pesar de que no es el mejor. Puede ser cuando tenga algo de tiempo libre. Te voy a meter con IXmlSerializable o XmlAttributeOverrides. – Koynov

Cuestiones relacionadas