Je rencontre ce problème très étrange en essayant de sérialiser une classe pour la journalisation à l'aide de XmlSerializer. Le code a été généré par l'outil wsdl.exe. La classe qui obtient sérialisé comme il est déclaré comme suit:Xmlserializer ne sérialisant pas les membres de classe de base
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "xxxxx")]
public partial class InheritedRequestA : BaseRequest
{
}
La sérialisation d'autres classes qui héritent aussi de BaseRequest comprend tous les membres non héritées, mais aucun des membres du public de BaseRequest. BaseRequest est déclaré comme suit.
[System.Xml.Serialization.XmlIncludeAttribute(typeof(InheritedRequestA))]
[System.Xml.Serialization.XmlIncludeAttribute(typeof(InheritedRequestB))]
[System.CodeDom.Compiler.GeneratedCodeAttribute("wsdl", "2.0.50727.3038")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "xxxxx")]
public partial class BaseRequest
{
//members here
}
Pour sérialiser les demandes et les réponses ensemble, j'ai écrit une classe wrapper très basique qui contient uniquement un objet de requête et un objet de réponse. Le code pour la sérialisation:
XmlSerializer serializer = new XmlSerializer(typeof(Wrapper));
string serializedObject = string.Empty;
using (MemoryStream stream = new MemoryStream())
{
serializer.Serialize(stream, wrapper);
stream.Position = 0;
using (StreamReader reader = new StreamReader(stream))
{
serializedObject = reader.ReadToEnd();
}
}
Toute pensée pourquoi les propriétés publiques héritées de la classe de base ne sont pas sérialisés se serait grandement apprécié.
EDIT: Voici la classe wrapper. Je l'ai sous-classé dans ActivatorWrapper et VersionRetrieverWrapper.
[Serializable]
[XmlInclude(typeof(Wrapper))]
[XmlInclude(typeof(ActivatorWrapper))]
[XmlInclude(typeof(VersionRetrieverWrapper))]
public class Wrapper
{
}
[Serializable]
public class VersionRetrieverWrapper : Wrapper
{
public InheritedRequestA Request { get; set; }
public InheritedResponseA Response { get; set; }
}
Pourriez-vous publier la définition de 'Wrapper'? Mon soupçon est qu'il manque certains attributs de sérialisation. –