一尘不染

为什么XML-Serializable类需要无参数构造函数

c#

我正在编写代码以进行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.TypeScope.GetTypeDesc(Type
type,MemberInfo来源,Boolean directReference,Boolean
throwOnError)在System.Xml.Serialization.ModelScope.GetTypeModel(Type type,
System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(Type
type,XmlRootAttribute root,String
defaultNamespace)在System.Xml.Serialization.XmlSerializer..ctor(Type
type,String defaultName space)在System.Xml.Serialization。
XmlSerializer..ctor(类型类型)

为什么必须有一个无参数的构造函数才能使xml序列化成功?

编辑:感谢cfeduke的回答。无参数构造函数可以是私有的或内部的。


阅读 307

收藏
2020-05-19

共1个答案

一尘不染

在对象的反序列化过程中,负责对对象进行反序列化的类将创建序列化类的实例,然后仅在获取要填充的实例后,才继续填充序列化的字段和属性。

你可以让你的构造函数privateinternal如果你想,只是这么长时间,因为它是无参数。

2020-05-19