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

.net 有没有办法避免XmlSerializer在反序列化时不初始化null属性?,.net,xmlserializer,.net,Xmlserializer,我有这门课: public class MySerializableClass { public List<MyObject> MyList { get; set; } } 公共类MySerializableClass { 公共列表MyList{get;set;} } 如果在序列化MySerializableClass时MyList为null,那么在反序列化MyList时我也需要将其设置为null,但是XmlSerializer总是在反序列化我的类时初始化它 有没有办法避

我有这门课:

public class MySerializableClass
{
    public List<MyObject> MyList { get; set; }
}
公共类MySerializableClass
{
公共列表MyList{get;set;}
}
如果在序列化MySerializableClass时MyList为null,那么在反序列化MyList时我也需要将其设置为null,但是XmlSerializer总是在反序列化我的类时初始化它

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

MyList为null时,甚至不会记录在序列化文件中。当我用空值加载它并再次保存它时,MyList不再是空的,它被序列化为一个包含0项的列表,但不是空的

谢谢

更多信息:


由于类结构中的某些代码限制,IsDeserialization属性不可行这看起来像一个bug

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

[XmlArray(IsNullable = true)]
public List<MyObject> MyList { get; set; }
[XmlArray(IsNullable=true)]
公共列表MyList{get;set;}
它序列化MyList属性,如下所示:

<MyList xsi:nil="true" />

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

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


您可能应该对此进行报告。

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

public class MySerializableClass 
{ 
    List<MyObject> myList 
    public List<MyObject> MyList { get {return myList;} set {myList = value;} } 
} 
公共类MySerializableClass
{ 
列表myList
公共列表MyList{get{return MyList;}set{MyList=value;}}
} 

我也遇到了同样的问题,但在属性中添加XmlArrayAttribute时没有设置任何内容,这对我来说是可行的

public class MySerializableClass
{
    [XmlArray]
    public List<MyObject> MyList { get; set; }
}
公共类MySerializableClass
{
[XmlArray]
公共列表MyList{get;set;}
}

如果添加名为*PropertyName*的属性并将其指定为布尔值,则XmlSerializer仅在该属性为true时才会呈现列表的标记

例如:

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

    [XmlIgnore]
    public bool MyListSpecified { get; set; }
}
公共类MySerializableClass
{
公共列表MyList{get;set;}
[XmlIgnore]
公共bool指定了{get;set;}
}

报告错误后,编辑问题以包含错误报告的URL。这将允许其他人投票支持该漏洞。请投票并在此处添加一些评论。这并不能解决问题,请尝试。是的,我实际上是这样做的,我简化了它作为示例,但感谢您的建议。哇,System.Xml从来不会让我感到惊讶。为集合类成员使用公共setter是非常不寻常的,请检查您的设计以验证这是您真正想要的。没有二传手也行,这不是我真正想要的。这是序列化程序想要的。如果我将get或set设置为private,反序列化程序将失败。