11

我有这堂课:

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

如果 MyList 在 MySerializableClass 被序列化时为空,那么当它被反序列化时我也需要它为空,但 XmlSerializer 在反序列化我的类时总是初始化它。

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

MyList 为空时甚至不会记录在序列化文件中。当我用空值加载它并再次保存时, MyList 不再为空,它被序列化为具有 0 个项目但不为空的 List<>。

谢谢。

更多信息:

由于类结构中的一些代码限制,IsDeserializing 属性不可行

4

4 回答 4

12

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

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

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

它将 MyList 属性序列化如下:

<MyList xsi:nil="true" />

所以xml中明明表明list为null,但是反序列化后还是初始化为一个空list……

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

您可能应该在Connect上报告这一点。

于 2010-02-03T00:07:27.887 回答
-1

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

public class MySerializableClass 
{ 
    List<MyObject> myList 
    public List<MyObject> MyList { get {return myList;} set {myList = value;} } 
} 
于 2010-02-03T00:26:11.713 回答
-1

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

public class MySerializableClass
{
    [XmlArray]
    public List<MyObject> MyList { get; set; }
}
于 2013-07-09T08:43:48.557 回答
-1

如果您添加名称为 *PropertyName*Specified 作为布尔值的属性,则 XmlSerializer 将仅在为 true 时呈现列表的标记。

例子:

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

    [XmlIgnore]
    public bool MyListSpecified { get; set; }
}
于 2014-08-11T11:59:04.273 回答