【发布时间】:2011-01-09 18:08:38
【问题描述】:
我有一个包含一些集合的类,我想将此类的实例序列化为 XML,而不必将集合初始化为空,也不必实现 IXmlSerializable。我不在乎它是创建空元素,还是根本不创建元素。只是它无需为每个基于集合的属性初始化集合即可工作。
我查看了我可以用来装饰属性的所有 XML 属性,但没有成功。这似乎是一件简单的事情,可以有一个元素或根本没有。然后当它被反序列化时,它只会让它们为空或忽略它们。
这是用于解决此问题的类的简单版本。使用这个和默认值,你会得到一个异常“对象引用未设置为对象的实例”,因为集合为空;
public class MyClass
{
public string Name { get; set; }
public bool IsAlive { get; set; }
public List<Car> Cars { get; set; }
public List<Home> Homes { get; set; }
public List<Pet> Pets { get; set; }
public void ToXmlFile(string fileName)
{
XmlSerializer serializer = new XmlSerializer(typeof(MyClass));
TextWriter writer = new StreamWriter(fileName);
serializer.Serialize(writer, this);
writer.Close();
}
}
编辑 感谢您的帮助,事实证明问题出在我的 GetHashCode 方法中,该方法没有正确处理 null。一旦我解决了这一切都很好。我将第一个回答的标记为正确。对不起红鲱鱼,但与你们一起解决它确实有帮助。
【问题讨论】:
-
还有什么问题?这应该有效(至少序列化和反序列化);你不喜欢什么行为?
-
我无法重现您声称获得的异常。正如您提供的那样,我能够序列化和反序列化您的确切 MyClass 的实例。也许还有其他事情发生?
-
@Brian 是的,还有其他事情正在发生,感谢所有快速帮助并表明它不是 XML 代码本身。 :)
-
是什么原因造成的?很好奇,因为我遇到了同样的异常,并且很确定这不是序列化。
-
@rushonerok 正如 2010 年 1 月 27 日帖子中的编辑所述,该问题是一个红鲱鱼,不是由 XmlSerializer 引起的,而是由我对 GetHashCode 的覆盖没有正确考虑 null 引起的。
标签: c# .net serialization collections xml-serialization