【发布时间】:2010-09-21 00:43:20
【问题描述】:
我正在编写代码来进行 Xml 序列化。具有以下功能。
public static string SerializeToXml(object obj)
{
XmlSerializer serializer = new XmlSerializer(obj.GetType());
using (StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, obj);
return writer.ToString();
}
}
如果参数是没有无参数构造函数的类的实例,则会抛出异常。
未处理的异常: System.InvalidOperationException: CSharpConsole.Foo 不能被序列化 因为它没有 无参数构造函数。在 System.Xml.Serialization.TypeDesc.CheckSupported() 在 System.Xml.Serialization.TypeScope.GetTypeDesc(类型 类型、成员信息源、布尔值 directReference,布尔型 throwOnError) 在 System.Xml.Serialization.ModelScope.GetTypeModel(类型 类型,布尔直接引用)在 System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(类型 类型,XmlRootAttribute 根,字符串 默认命名空间)在 System.Xml.Serialization.XmlSerializer..ctor(类型 类型,字符串默认名称空间)在 System.Xml.Serialization.XmlSerializer..ctor(类型 类型)
为什么一定要有无参构造函数才能让xml序列化成功?
编辑:感谢 cfeduke 的回答。无参数构造函数可以是私有的或内部的。
【问题讨论】:
-
如果您有兴趣,我发现了如何在不需要构造函数的情况下创建对象(请参阅更新)——但这对 XmlSerializer 毫无帮助——它仍然需要它。也许对自定义代码有用。
-
XmlSerializer需要一个默认的无参数构造函数进行反序列化。 -
无参数构造函数的声明不是必需的。一旦声明了参数化构造函数,也必须声明无参数构造函数。
标签: c# .net xml-serialization