小编典典

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

all

我正在编写代码来进行 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 的回答。无参数构造函数可以是私有的或内部的。


阅读 80

收藏
2022-08-20

共1个答案

小编典典

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

您可以制作您的构造函数private,或者internal如果您愿意,只要它是无参数的即可。

2022-08-20