2010-03-05 11 views
5

Ho alcuni file .cs generati da xsd.exe da uno schema XSD.Le classi generate da xsd.exe non serializzano gli attributi del valore predefinito

Il mio problema è che quando provo a serializzare tali classi su xml, gli attributi i cui valori corrispondono ai valori predefiniti definiti nello schema xsd non vengono serializzati.

Ho scoperto che il mio problema è risolto quando rimuovo l'attributo [System.ComponentModel.DefaultValueAttribute(typeof(<someType>), "<SomeValue>")] per il membro che rappresenta un campo predefinito.

Quindi la mia domanda non è il modo più elegante per farlo? Ad esempio c'è un modo per specificare che voglio comunque che i valori di default siano serializzati?

risposta

4

Le versioni brevi sono: sì. sembra che sia l'approccio più semplice.

Ho provato le cose "ovvie" (in particolare le *Specified e ShouldSerialize* modelli che XmlSerializer supporti, ma anche IsNullable) e mantiene solo sul non incluso il valore.

Le opzioni successive sono IXmlSerializable (che è semplice) o XmlAttributeOverrides (una duplicazione di sforzi) - nessuna delle quali è particolarmente allettante qui. Mi chiedo se il tuo approccio attuale è meno lavoro? Ovviamente potresti semplicemente esportare il WSDL e modificarlo per rimuovere il default (e generare dalla versione modificata).

Come una parte - se si trattava di WCF, c'è lo [DataMember(EmitDefaultValue = ...)] che controlla; forse hanno aggiunto questo come una richiesta di funzionalità?

+0

Grazie per la risposta. In effetti il ​​mio approccio attuale è meno efficace, nonostante non sia il migliore. Forse quando avrò un po 'di tempo libero farò confusione con IXmlSerializable o XmlAttributeOverrides. – Koynov

Problemi correlati