如何在C#中将列表设置为null?

时间:2013-11-14 12:06:46

标签: c# xml

我正在读取.xml文件,并且根据元素,可能会有也可能没有依赖项标记。

[XmlArray("dependencies"), XmlArrayItem("dependency")]
public List<string> Dependencies { get; set; }

当没有&lt;依赖项&gt;,我希望列表设置为null,我试图用

List<string> Dependencies = null;

但是,当我反序列化我的xml时,依赖关系显示为Count = 0。我希望它显示为设置为null,所以当我序列化它时,我不会得到空的&lt;依赖性/&gt;在我的xml文件中标记为无用的混乱。这用一个字符串很精彩,我只是将其设置为= null,但是对于列表,这在某种程度上无法解决。

4 个答案:

答案 0 :(得分:3)

在XmlArray属性

上使用IsNullable属性
[System.Xml.Serialization.XmlArray("dependencies", IsNullable=true)]

副作用是您的xsi:nill=true元素会获得dependencies属性,但如果您的架构支持它,则价格很小。

答案 1 :(得分:0)

尝试将IsNullable属性设置为true:

[XmlArray("dependencies"), XmlArrayItem("dependency"), IsNullable = true]
public List<string> Dependencies { get; set; }

答案 2 :(得分:0)

similar question。这里的建议是使用不带参数的[XmlArray]。 IsNullable不会为您提供所需的干净XML。

答案 3 :(得分:0)

如果使用ShouldSerialize为方法添加前缀并将返回类型设置为bool,则可以覆盖xmlserializer是否会序列化当前属性。在这种情况下,如果计数为零,则不会序列化依赖项。

    [XmlArray("dependencies"), XmlArrayItem("dependency")]
    public List<string> Dependencies { get; set; }
    public bool ShouldSerializeDependencies()
    {
        if (Dependencies != null && Dependencies.Count > 0)
        {
            return true;
        }
        else
        {
            return false;
        }
    }