相关疑难解决方法(0)

XmlSerializer - 反映类型时出错

使用C#.NET 2.0,我有一个复合数据类,它具有该[Serializable]属性.我正在创建一个XMLSerializer类并将其传递给构造函数:

XmlSerializer serializer = new XmlSerializer(typeof(DataClass));
Run Code Online (Sandbox Code Playgroud)

我得到一个例外说:

有一个反映类型的错误.

在数据类内部还有另一个复合对象.这是否还需要具有该[Serializable]属性,或者将其置于顶层对象上,是否以递归方式将其应用于内部的所有对象?

.net c# xml serialization .net-2.0

326
推荐指数
8
解决办法
23万
查看次数

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

我正在编写代码来进行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();
    }
}
Run Code Online (Sandbox Code Playgroud)

如果参数是没有无参数构造函数的类的实例,它将抛出异常.

未处理的异常:System.InvalidOperationException:CSharpConsole.Foo无法序列化,因为它没有无参数构造函数.System.Xml.Serialization.ModelScope.GetTypeModel的System.Xml.Serialization.TypeScope.GetTypeDesc(Type type,MemberInfo sourc e,Boolean directReference,Boolean throwOnError)中的System.Xml.Serialization.TypeDesc.CheckSupported()处于类型类型, System.Xml.Serialization上的System.Xml.Serialization.XmlSerializer..ctor(Type type,String defaultName space)中System.Xml.Serialization.XmlReflectionImporter.ImportTypeMapping(Type type,XmlRootAttribute root,String defaultNamespace)的布尔直接引用. XmlSerializer..ctor(类型类型)

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

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

.net c# xml-serialization

168
推荐指数
3
解决办法
11万
查看次数

标签 统计

.net ×2

c# ×2

.net-2.0 ×1

serialization ×1

xml ×1

xml-serialization ×1