我正在编写代码来进行 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(Type type, MemberInfo source, Boolean directReference, Boolean throwOnError) 在 System.Xml.Serialization.ModelScope.GetTypeModel(Type type, Boolean direct Reference) 在 System.Xml.Serialization.XmlSerializer..ctor(Type type, String defaultName space) 在 System.Xml.Serialization 的 System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(Type type , XmlRootAttribute root, String defaultNamespace)。 XmlSerializer..ctor(类型类型)
为什么必须有一个无参数的构造函数才能让 xml 序列化成功?
编辑:感谢 cfeduke 的回答。无参数构造函数可以是私有的或内部的。
在对象的反序列化过程中,负责反序列化对象的类创建序列化类的实例,然后仅在获取要填充的实例后才继续填充序列化的字段和属性。
您可以制作您的构造函数private,或者internal如果您愿意,只要它是无参数的即可。
private
internal