我有一个可以为null int的类?数据类型设置为序列化为xml元素.有没有办法设置它,使xml序列化程序在值为null时不会序列化元素?

我已try 添加[System.Xml.Serialization.XmlElement(IsNullable=false)]属性,但收到运行时序列化异常,指出反映该类型时出错,因为"对于可为空的类型,IsNullable可能未设置为‘False’.请考虑使用‘System.Int32’类型或从XmlElement属性中删除IsNullable属性."

[Serializable]
[System.Xml.Serialization.XmlRoot("Score", Namespace = "http://mycomp.com/test/score/v1")]
public class Score
{
    private int? iID_m;
    ...

    /// <summary>
    /// 
    /// </summary>        
    public int? ID 
    { 
        get 
        { 
            return iID_m; 
        } 
        set 
        { 
            iID_m = value; 
        } 
    }
     ...
}

上面的类将序列化为:

<Score xmlns="http://mycomp.com/test/score/v1">
    <ID xsi:nil="true" />
</Score>

但是对于null的ID,我根本不需要ID元素,主要是因为当我在MSSQL中使用OPENXML时,它会返回0,而不是null

推荐答案

XmlSerializer支持ShouldSerialize{Foo}()模式,因此您可以添加一个方法:

public bool ShouldSerializeID() {return ID.HasValue;}

还有{Foo}Specified模式-不确定XmlSerializer是否支持该模式.

.net相关问答推荐

AutoMapper在实体框架查询后不知从哪里带来数据

查找 2 个已知值之间的字符串

为什么具有可为空值的 struct 的 HashSet 非常慢?

SetupSet() 已过时.代替什么?

在 WebApi 中需要 SSL?

代理、包装器或外观类之间有什么区别

如何摆脱 VS2008 中的目标程序集不包含服务类型错误消息?

在 C# DllImport 中使用 32 位或 64 位 dll

共享 AssemblyInfo 用于跨解决方案的统一版本控制

托管和非托管代码、内存和大小有什么区别?

struct 中需要覆盖什么以确保平等正常运行?

HashSet 是否保留插入顺序?

如何将枚举值序列化为 int?

向 .NET 应用程序添加脚本功能

我可以在没有两个查询的情况下通过布尔标准将 IEnumerable 一分为二吗?

返回 IList 是否比返回 T[] 或 List 更糟糕?

DataGridView 在我的两个屏幕之一上的可怕重绘性能

我应该如何删除 DbSet 中的所有元素?

将 Dictionary 转换为匿名对象?

如何在 nuspec 中指定特定的依赖版本?