有没有办法避免XmlSerializer在反序列化时不初始化null属性?

时间:2010-02-02 23:43:43

标签: .net xmlserializer

我有这堂课:

public class MySerializableClass
{
    public List<MyObject> MyList { get; set; }
}

如果在MySerializableClass被序列化时MyList为null,我在反序列化时需要将其置为null,但是XmlSerializer在反序列化我的类时总是初始化它。

有没有办法避免它初始化null属性?

当列表文件为空时,MyList甚至没有记录在序列化文件中。当我用空值加载它并再次保存时,MyList不再为null,它被序列化为List&lt;&gt;有0个项目,但不是null。

感谢。

更多信息:

由于类

结构中的某些代码限制,IsDeserializing属性不可行

4 个答案:

答案 0 :(得分:11)

这看起来像个错误......

即使您尝试将该属性标记为可为空,它似乎也不起作用。

[XmlArray(IsNullable = true)]
public List<MyObject> MyList { get; set; }

它按如下方式序列化MyList属性:

<MyList xsi:nil="true" />

因此XML清楚地表明该列表为空,但在反序列化之后,它仍然被初始化为空列表...

如果您将List<MyObject>替换为MyObject[],它可以正常工作(即使没有IsNullable = true),但它可能不是您想要的......

您应该在Connect上报告此内容。

答案 1 :(得分:0)

如果您需要null,请不要使用自动实现的属性。 使用例如

public class MySerializableClass 
{ 
    List<MyObject> myList 
    public List<MyObject> MyList { get {return myList;} set {myList = value;} } 
} 

答案 2 :(得分:0)

我遇到了同样的问题但是将XmlArrayAttribute添加到没有设置的属性使它对我有用

public class MySerializableClass
{
    [XmlArray]
    public List<MyObject> MyList { get; set; }
}

答案 3 :(得分:0)

如果添加名为* PropertyName的属性*指定为布尔值,XmlSerializer将仅在列表为真时呈现列表的标记。

示例:

public class MySerializableClass
{
    public List<MyObject> MyList { get; set; }

    [XmlIgnore]
    public bool MyListSpecified { get; set; }
}
相关问题