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 '是一个对象,我正在尝试序列化
答案 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属性标记接口。