1

我正在阅读一个 .xml 文件,并且根据元素,可能有也可能没有依赖项标签。

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

当没有 <dependencies> 时,我希望将列表设置为 null,我试图这样做

List<string> Dependencies = null;

但是,当我反序列化我的 xml 时,依赖项显示为 Count=0。我希望它显示为设置为 null,所以当我将它序列化回来时,我不会在我的 xml 文件中将空的 <dependencies /> 标记作为无用的混乱。这对一个字符串非常有效,我只是将它设置为 = null,但是对于列表,这不知何故行不通。

4

4 回答 4

3

在 XmlArray 特性上使用 IsNullable 属性

[System.Xml.Serialization.XmlArray("dependencies", IsNullable=true)]

副作用是您将获得元素的xsi:nill=true属性,dependencies但如果您的架构支持它,这是一个很小的代价。

于 2013-11-14T12:09:58.260 回答
0

尝试将 IsNullable 属性设置为 true:

[XmlArray("dependencies"), XmlArrayItem("dependency"), IsNullable = true]
public List<string> Dependencies { get; set; }
于 2013-11-14T12:10:05.830 回答
0

看到这个类似的问题。这里的建议是使用不带参数的 [XmlArray]。IsNullable 不会为您提供所需的干净 XML。

于 2013-11-14T12:14:16.103 回答
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;
        }
    }
于 2013-11-14T12:55:49.933 回答