J'obtiens une erreur lors de la tentative de sérialiser un objet XML
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)
si vous voyez " ProfileChulbul' est un objet, je suis en train de sérialiser
un peu plus d'infos?
Poster du code, veuillez
BreakHead, la question est encore incroyablement vague. S'il vous plaît poster de code pour la classe que vous essayez de sérialiser.
Poster du code, veuillez
BreakHead, la question est encore incroyablement vague. S'il vous plaît poster de code pour la classe que vous essayez de sérialiser.
OriginalL'auteur BreakHead | 2011-02-07
Vous devez vous connecter pour publier un commentaire.
Cela se produit lorsque le type de la sérialisation d'une propriété d'un type qui n'est pas statiquement connu pour le sérialiseur instance. Par exemple, si le type
ProfileChulbul
a un type de base, qui est de savoir comment il est référencé à partir de ce que vous êtes à la sérialisation, le sérialiseur ne savent pas comment travailler avec elle.Vous avez deux options pour résoudre ce problème:
Ajouter le
[XmlInclude(typeof(ProfileChulbul))]
attribut (et d'autres attributs pour tous les autres types qui seront utilisés) pourProfileChulbul
's de la classe de baseModifier la classe que vous l'utilisez pour la sérialisation d'utiliser des génériques à la place de l'Objet
Passer
typeof(ProfileChulbul)
(et tous les autres types qui seront utilisés) dans le sérialiseur constructeur au moment de l'exécution, comme suit:var knownTypes = new Type[] { typeof(ProfileChulbul), typeof(ProfileSomethingElse) };
var serializer = new XmlSerializer(typeof(TheSerializableType), knownTypes);
Grande réponse. Merci pour cette!
OriginalL'auteur Daniel Schaffer
De la partie de la stacktrace "Utiliser le XmlInclude ou SoapInclude attribut pour spécifier les types qui ne sont pas connus de manière statique", je serais prêt à parier que vous essayez de sérialiser une interface ou d'une collection d'interfaces? La Sérialisation Xml ne permet pas de cela, essayez de marquage de l'interface avec les XmlInclude attributs.
BreakHead, c'est exactement ce qui est la cause de l'erreur ensuite. Pouvez-vous utiliser des génériques au lieu d'un simple vieux Objets?
+1 j'ai eu la même expérience 🙁 je suis maintenant à l'aide de sharpserializer qui peut manipuler le xml-(dé-)serialisations.
si vous sérialiser un objet, vous devez connaître les types de béton qui doivent être sérialisé. Pouvez-vous mettre un peu de code pour le rendre un peu plus clair sur ce qui se passe?
OriginalL'auteur Steve Danner