Ho una serie di classi che sto convertendo in XML utilizzando DataContractSerializer di .NET in .NET 4.0. La serializzazione funziona correttamente e posso analizzare l'XML e ricreare gli oggetti .NET in seguito senza alcuna difficoltà.Evitare di utilizzare lo spazio dei nomi "http://www.w3.org/2001/XMLSchema-instance" con .Net DataContractSerializer
Tuttavia, la maggior parte dei DataMember non sono richiesti. [DataMember (IsRequired = false)]. Questo funziona perfettamente con la de-serializzazione dell'XML, in cui è possibile semplicemente perdere il nodo XML dal documento, ma quando serializzi un oggetto esistente in XML, DataContractSerializer insiste sulla scrittura di proprietà che hanno valori nulli come nodi con un attributo, ad es.
[DataContract(Name = "response", Namespace = "http://domain.com/name")]
public class MyResponseClass
{
[DataMember(Name = "count", IsRequired = true, Order = 0)]
public int Count { get; set; }
[DataMember(Name = "info", IsRequired = false, Order = 1)]
public InfoClass Info { get; set; }
[DataMember(Name = "metadata", IsRequired = false, Order = 2)]
public MetadataList Metadatas { get; set; }
}
può essere serializzato dal
<response xmlns="http://domain.com/name">
<count>4</count>
</response>
Tuttavia, se puntate l'oggetto, si crea:
<response xmlns="http://domain.com/name" xmlns:i="http://www.w3.org/2001/XmlSchema-instance">
<count>4</count>
<info i:nil="true" />
<metadata i:nil="true" />
</response>
Esiste un modo per ottenere il DataContractSerializer di non scrivere il nodo invece , quando ha un valore nullo?
hai lasciato fuori il tuo esempio. –
Ben chiazzato ... Qualcosa è andato storto con il taglia e incolla ... –