Reputation: 10672
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)
if you see 'ProfileChulbul' is an object, I am trying to serialize
Upvotes: 7
Views: 15167
Reputation: 57871
This happens when the type you're serializing has a property of a type that is not statically known to the serializer instance. For example, if the type ProfileChulbul
has a base type, which is how it is referenced from what you're serializing, the serializer won't know how to work with it.
You have a couple options for resolving this problem:
Add the [XmlInclude(typeof(ProfileChulbul))]
attribute (and additional attributes for any other types that will be used) to ProfileChulbul
's base class
Modify the class you use for serialization to use generics instead of Object
Pass typeof(ProfileChulbul)
(and any other types that will be used) into the serializer constructor at runtime, like so:
var knownTypes = new Type[] { typeof(ProfileChulbul), typeof(ProfileSomethingElse) };
var serializer = new XmlSerializer(typeof(TheSerializableType), knownTypes);
Upvotes: 25
Reputation: 22198
Based on the part of the stacktrace "Use the XmlInclude or SoapInclude attribute to specify types that are not known statically", I would bet you are trying to serialize an interface or collection of interfaces? Xml Serialization does not allow this, try marking the interface with the XmlInclude attributes.
Upvotes: 1