Xml序列化 - 渲染空元素

时间:2010-02-24 22:10:43

标签: c# xml-serialization

我正在使用XmlSerializer并在类

中具有以下属性
public string Data { get; set; }

我需要输出完全如此

<Data />

我将如何实现这一目标?

5 个答案:

答案 0 :(得分:15)

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

Data = string.Empty;

答案 1 :(得分:6)

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

public string Data { get; set; }

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

答案 2 :(得分:1)

尝试使用 public bool ShouldSerialize PropertyName(){} 并在其中设置默认值。

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

可以在MSDN上找到有关其工作原理的说明。

答案 3 :(得分:0)

您可以尝试将[XmlElement(IsNullable=true)]之类的XMLElementAttribute添加到该成员。这将强制XML Serializer添加元素,即使它是null。

答案 4 :(得分:0)

您可以尝试将[XmlElement(IsNullable = true)]等XMLElementAttribute添加到该成员中,并在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 />