2010-02-24 107 views

回答

6

解决方案是创建一个PropertyNameSpecified属性,序列化器用来确定是否序列化属性。例如:

public string Data { get; set; } 

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

您可以尝试向该成员添加像[XmlElement(IsNullable=true)]这样的XMLElementAttribute。这将强制XML序列化程序添加元素,即使它为空。

+9

但不会此呈现<数据XSI:无= “真”/> – 2010-02-24 22:23:44

12

最近,我这样做的,还存在另一种方式做到这一点,似乎有点简单。您只需要将该属性的值初始化为空字符串,然后根据需要创建一个空标记;

Data = string.Empty; 
+0

对于字符串,这工作就像一个魅力!如果数据从未被赋值,它将以XML格式显示为'',并且没有xsi:nil =“true”属性。 – 2013-03-14 17:49:30

1

尝试使用公共BOOL ShouldSerialize_PropertyName _(){}里面设置的默认值。

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

工作原因说明可在MSDN找到。

+1

我站好了。添加了相关文档的链接,以便其他人不会犯同样的错误。 – BradleyDotNET 2014-12-03 18:35:26

0

你可以尝试添加XMLElementAttribute像[的XmlElement(ISNULLABLE = TRUE)该成员,并设置在get/set属性是这样的:

[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; 

所以你不会有:

<Data xsi:nil="true" /> 

我们将看到这样的渲染:

<Data />