Je dispose d'un service Web qui sérialise une classe (la classe provient du service Web) dans un MSMQ, puis un service Windows vérifie la file d'attente et la désérialisation. Le service Windows a une référence Web pour obtenir la classe.Classe C# référencée à partir du service Web ne désérialisant pas correctement
Si je désérialise dans le service Web, tout va bien. Cependant, lorsque je désérialise le service Windows, tout fonctionne à l'exception de deux tableaux de chaînes qui apparaissent comme nulles, donc je crois que quelque chose ne se transfère pas correctement sur la référence Web.
Voici un extrait de la classe en question:
[Serializable, XmlInclude(typeof(EmailType))]
public partial class Email
{
[System.Xml.Serialization.XmlElement("BodyParameters")]
public string[] BodyParameters
{
get
{
return this.bodyParameters;
}
set
{
this.bodyParameters = value;
}
}
[System.Xml.Serialization.XmlElement("SubjectParameters")]
public string[] SubjectParameters
{
get
{
return this.subjectParameters;
}
set
{
this.subjectParameters = value;
}
}
}
Le fichier Reference.cs je reçois dans mon service Windows ressemble à ceci:
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("BodyParameters")]
public string[] BodyParameters {
get {
return this.bodyParametersField;
}
set {
this.bodyParametersField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("SubjectParameters")]
public string[] SubjectParameters {
get {
return this.subjectParametersField;
}
set {
this.subjectParametersField = value;
}
}
Y at-il une manière particulière, je dois référencer la classe ou configurer la chaîne [] dans la classe pour qu'elle soit correctement référencée?
est ici la sortie que je reçois si je sérialiser un fichier:
<?xml version="1.0" encoding="utf-8"?>
<Email xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" MessageType="None" PackageID="0" To="[email protected]" Subject="testing..." Body="this is a test" IsHTML="false">
<BodyParameters>one two</BodyParameters>
<BodyParameters>three four</BodyParameters>
<BodyParameters>test test</BodyParameters>
<SubjectParameters>foo</SubjectParameters>
</Email>
Gardez à l'esprit, tout sauf BodyParameters et SubjectParameters sort bien dans le service Windows. Service Web, tout fonctionne.
Suggestion: supprimer l'attribut '[Serializable]', comme il est pas utilisé par sérialisation XML. Ensuite, effectuez une sérialisation dans un fichier et publiez le fichier afin que nous puissions voir le format du fichier XML. –
Autre suggestion: DRY: utilisez la même bibliothèque de classes pour la sérialisation/désérialisation de vos projets. – jro