序列化为XML时,在可空值类型上防止<xsi:nil ="true">

Rya*_*all 8 .net serialization xml-serialization xml-nil

我在可序列化类中添加了一些可以为null的值类型.我执行序列化使用XmlSerializer但是当值设置为时null,我得到一个空节点xsi:nil="true".这是我在Xsi中找到的正确行为:nil属性绑定支持.

有没有办法关闭此选项,以便在值类型为时输出任何内容null

Tod*_*ton 10

我必须ShouldSerialize为每个可为空的值添加一个方法。

[Serializable]
public class Parent
{
    public int? Element { get; set; }

    public bool ShouldSerializeElement() => Element.HasValue;
}
Run Code Online (Sandbox Code Playgroud)


小智 5

我遇到了同样的问题..这里是我读到的关于在序列化为XML时处理可空值类型的地方之一:http://stackoverflow.com/questions/244953/serialize-a-nullable-int

他们提到了使用内置模式,比如为可空值类型创建其他属性.喜欢名为的财产

public int? ABC
Run Code Online (Sandbox Code Playgroud)

你必须添加public bool ShouldSerializeABC() {return ABC.HasValue;} 或公开bool ABCSpecified { get { return ABC.HasValue; } }

我只是序列化到xml发送到sql存储过程,所以我也避免更改我的类.我正在[not(@xsi:nil)]检查我的.value()查询中的所有可空元素.


小智 5

我发现 public bool ABCSpecified 是唯一适用于 .NET 4.0 的布尔值。我还必须添加 XmlIgnoreAttribute

这是我在 Web Reference Resource.cs 文件中抑制名为 ABC 的字符串的完整解决方案:

// backing fields
private string abc;
private bool abcSpecified; // Added this - for client code to control its serialization

// serialization of properties
[System.Xml.Serialization.XmlElementAttribute(IsNullable=true)]
public string ABC
{
    get
    {
        return this.abc;
    }
    set
    {
        this.abc= value;
    }
}

// Added this entire property procedure
[System.Xml.Serialization.XmlIgnoreAttribute()]
public bool ABCSpecified
{
    get
    {
        return this.abcSpecified;
    }
    set
    {
        this.abcSpecified = value;
    }
}
Run Code Online (Sandbox Code Playgroud)