我在尝试XML序列化对象时遇到错误

时间:2011-02-07 16:45:39

标签: c# .net xml-serialization

System.Web.Services.Protocols.SoapException: Server was unable to process request. ---> System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidOperationException: The type ProfileChulbul was not expected. Use the XmlInclude or SoapInclude attribute to specify types that are not known statically.
   at System.Xml.Serialization.XmlSerializationWriter.WriteTypedPrimitive(String name, String ns, Object o, Boolean xsiType)
   at Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterProfileDefinitionExportHolder.Write1_Object(String n, String ns, Object o, Boolean isNullable, Boolean needType)

如果你看到' ProfileChulbul '是一个对象,我正在尝试序列化

2 个答案:

答案 0 :(得分:19)

当您序列化的类型具有序列化程序实例未静态知道的类型的属性时,会发生这种情况。例如,如果类型ProfileChulbul具有基类型,这是从序列化引用的类型,则序列化程序将不知道如何使用它。

您有几种方法可以解决此问题:

  • [XmlInclude(typeof(ProfileChulbul))]属性(以及将使用的任何其他类型的其他属性)添加到ProfileChulbul的基类

  • 修改用于序列化的类以使用泛型而不是Object

  • 在运行时将typeof(ProfileChulbul)(以及将使用的任何其他类型)传递给序列化器构造函数,如下所示:

    var knownTypes = new Type[] { typeof(ProfileChulbul), typeof(ProfileSomethingElse) };

    var serializer = new XmlSerializer(typeof(TheSerializableType), knownTypes);

答案 1 :(得分:1)

基于stacktrace的一部分“使用XmlInclude或SoapInclude属性来指定静态不知道的类型”,我敢打赌你试图序列化一个接口或接口集合? Xml序列化不允许这样做,请尝试使用XmlInclude属性标记接口。