为什么xml-可序列化类需要无参数构造函数?我正在编写代码来执行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类型)、MemberInfoSource(System.Xml.Serialization.ModelScope.GetTypeModel(Type类型)、System.Xml.Serialization.ModelScope.GetTypeModel(Type类型(System.Xml.Serialization.ModelScope.GetTypeModel(Type类型)、System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(Type类型(布尔直接引用)、System.Xml.Serialization.XmlSerializer..ctor(Type类型下的XmlRootAttribute根、StringdefaultNamesspace(System.Xml.Serialization.XmlSerializer..ctor(Type类型)、StringdefaultName空间(System.Xml.Serialization.XmlSerializer..ctor(Type类型)为什么必须有一个无参数构造函数才能使XML序列化成功?编辑:谢谢cfeduke的回答。无参数构造函数可以是私有的,也可以是内部的。
3 回答
小唯快跑啊
TA贡献1863条经验 获得超2个赞
private
internal
皈依舞
TA贡献1851条经验 获得超3个赞
XmlSerializer
BinaryFormatter
DataContractSerializer
不要
DataContractSerializer
[DataContract]
/[DataMember
[XmlAttribute]
BinaryFormatter
FormatterServices.GetUninitializedObject()
由于对象的新实例初始化为零,并且没有运行构造函数,因此该对象可能不表示该对象认为有效的状态。只有当用户打算立即填充所有字段时,才应使用当前方法进行反序列化。它不会创建未初始化的字符串,因为创建不可变类型的空实例没有任何用途。
FormatterServices
- 3 回答
- 0 关注
- 962 浏览
添加回答
举报
0/150
提交
取消