我使用XmlSerializer,并具有以下特性的一类XML序列化 - 渲染空元素
public string Data { get; set; }
,我需要输出酷似所以
<Data />
我怎么会去实现这个?
我使用XmlSerializer,并具有以下特性的一类XML序列化 - 渲染空元素
public string Data { get; set; }
,我需要输出酷似所以
<Data />
我怎么会去实现这个?
解决方案是创建一个PropertyNameSpecified
属性,序列化器用来确定是否序列化属性。例如:
public string Data { get; set; }
[XmlIgnore]
public bool DataSpecified
{
get { return !String.IsNullOrEmpty(Data); }
set { return; } //The serializer requires a setter
}
您可以尝试向该成员添加像[XmlElement(IsNullable=true)]
这样的XMLElementAttribute。这将强制XML序列化程序添加元素,即使它为空。
最近,我这样做的,还存在另一种方式做到这一点,似乎有点简单。您只需要将该属性的值初始化为空字符串,然后根据需要创建一个空标记;
Data = string.Empty;
对于字符串,这工作就像一个魅力!如果数据从未被赋值,它将以XML格式显示为'',并且没有xsi:nil =“true”属性。 – 2013-03-14 17:49:30
尝试使用公共BOOL ShouldSerialize_PropertyName _(){}里面设置的默认值。
public bool ShouldSerializeData()
{
Data = Data ?? "";
return true;
}
工作原因说明可在MSDN找到。
我站好了。添加了相关文档的链接,以便其他人不会犯同样的错误。 – BradleyDotNET 2014-12-03 18:35:26
你可以尝试添加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 />
但不会此呈现<数据XSI:无= “真”/> – 2010-02-24 22:23:44