我有这堂课:
public class MySerializableClass
{
public List<MyObject> MyList { get; set; }
}
如果在MySerializableClass被序列化时MyList为null,我在反序列化时需要将其置为null,但是XmlSerializer在反序列化我的类时总是初始化它。
有没有办法避免它初始化null属性?
当列表文件为空时,MyList甚至没有记录在序列化文件中。当我用空值加载它并再次保存时,MyList不再为null,它被序列化为List&lt;&gt;有0个项目,但不是null。
感谢。
更多信息:
由于类
结构中的某些代码限制,IsDeserializing属性不可行答案 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; }
}