2010-02-24 20 views

Respuesta

6

La solución a esto fue crear una propiedad PropertyNameSpecified que el serializador usa para determinar si serializar la propiedad o no. Por ejemplo:

public string Data { get; set; } 

[XmlIgnore] 
public bool DataSpecified 
{ 
    get { return !String.IsNullOrEmpty(Data); } 
    set { return; } //The serializer requires a setter 
} 
0

Puede intentar agregar XMLElementAttribute como [XmlElement(IsNullable=true)] a ese miembro. Eso obligará al Serializador XML a agregar el elemento incluso si es nulo.

+9

Pero no va a hacer que este

12

Hace poco estaba haciendo esto y hay una forma alternativa de hacerlo, que parece un poco más simple. Solo necesita inicializar el valor de la propiedad en una cadena vacía, luego creará una etiqueta vacía cuando lo requiera;

Data = string.Empty; 
+0

¡Para cuerdas, esto funcionó como un encanto! Si a Data nunca se le asigna un valor, estará presente en el XML como '' y sin el atributo xsi: nil = "true". –

1

tratar de utilizar public bool ShouldSerialize_PropertyName _() {} con el ajuste el valor predeterminado en el interior.

public bool ShouldSerializeData() 
{ 
    Data = Data ?? ""; 
    return true; 
} 

Descripción de por qué esto funciona se puede encontrar en MSDN.

+1

Soy corregido. Se agregó un enlace a la documentación relevante para que otros no cometan el mismo error. – BradleyDotNET

0

Usted podría intentar agregar el XmlElementAttribute como [XmlElement (IsNullable = true)] para ese miembro y fijar también en el get/set propiedad algo como esto:

[XmlElement(IsNullable = true)] 
public string Data 
{ 
    get { return string.IsNullOrEmpty(this.data) ? string.Empty : this.data; } 
    set 
    { 
     if (this.data != value) 
     { 
      this.data = value; 
     } 
    } 
} 
private string data; 

Y por lo que no tiene:

<Data xsi:nil="true" /> 

tendrá esto en imagen:

<Data /> 
Cuestiones relacionadas