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)