Je reçois ce qui suit lors de la liaison pour sérialiser un message d'accès à l'aide de la LOS FORIAT. P>
ERREUR: SYS.WEBIFFORMS.PAGEREQUESTANGERSERERERROREXCEPTION: ERREUR SÉRIALISATION Valeur 'System.NET.Mail.MailMessage' of Type 'System.Net.Mail.MailMessage.' P>
Y a-t-il un moyen facile de sérialiser cet objet ou je vais que je vais devoir saisir chaque propriétés O FHTE individuellement? P>
3 Réponses :
Malheureusement, la classe System.net.Mail.MailMessage n'est pas marquée comme sérialisable. Donc, oui, vous devrez le faire vous-même. Il existe une technique décrite dans le poteau de blog suivant qui peut vous donner une idée de la façon dont vous pourriez procéder: Comment sérialiser un mailMessage ... Fondamentalement, vous devrez extraire chacune des propriétés individuellement. Citation: P>
Pour sérialiser les propriétés d'un objet MailMessage, vous pouvez créer un nouvelle classe et créer une propriété de type MailMessage pour celui-ci intégré votre mailmessage dans la classe. Dans cette nouvelle classe, vous pouvez mettre en œuvre Interface ixmllSérialisable pour sérialiser manuellement son mailMessage. Ici Je crée cette classe et appelez-le sérializableMailMailMessage [...] p>
[Mise en œuvre du code des méthodes WRITEXML () et READXML () suivez; Voir le lien source] em> p> blockQuote>
Link Redirection de la page d'accueil du blog.
@Gunnarsteinn merci - corrigé.
Le lien est toujours brisé.
@Campinho Le blog n'existe plus.
@ Chrisw.rea oh, c'est une honte, une nouvelle référence?
@Campinho n'était pas mon blog, alors, non. Regardez l'autre réponse?
Je sais que c'est un article plus ancien, mais j'ai également eu la question où j'avais besoin de sérialiser la classe Mailaddress, donc j'ai créé une version sérialisable. Si vous êtes en mesure d'utiliser une classe de messagerie personnalisée au lieu de la classe System.net.Mail.MailAddress, cela peut fonctionner pour vous.
/// <summary> /// Serializable implementation of <see cref="System.Net.Mail.MailAddress"/>. /// </summary> [Serializable] public class MailAddress : System.Net.Mail.MailAddress, ISerializable { // Keep reference to the display name encoding so we can serialize/deserialize the value private readonly Encoding _displayNameEncoding; public MailAddress(string address) : this(address, null, null) { } public MailAddress(string address, string displayName) : this(address, displayName, null) { } public MailAddress(string address, string displayName, Encoding displayNameEncoding) : base(address, displayName, displayNameEncoding) { // Keep reference to the supplied displayNameEncoding so we can serialize/deserialize this value _displayNameEncoding = displayNameEncoding ?? Encoding.GetEncoding("utf-8"); } public void GetObjectData(SerializationInfo info, StreamingContext context) { info.AddValue("Address", base.Address); info.AddValue("DisplayName", base.DisplayName); info.AddValue("DisplayNameEncoding", _displayNameEncoding); } protected MailAddress(SerializationInfo info, StreamingContext context) : this(info.GetString("Address"), info.GetString("DisplayName"), (Encoding)info.GetValue("DisplayNameEncoding", typeof (Encoding))) { } }
Pour ceux qui recherchent le code source complet sur comment sérialiser MailMessage strong> en XML écrit par Keyvan Nayyeri, voici le lien vers son github: https://github.com/keyvan/Gopi/blob/master/Gopi/Gopi/SerializableMailMessage.cs p> Et voici l'archive de son blog qui est maintenant défunte: p> http://web.archive.org/web/20131124074822/http://keyvan.io/how-to-serialize -a-MailMessage p> Juste au cas où le lien ci-dessus pourrait devenir mort aussi, ici, je repostez son blog ici: p> Comment un MailMessage Sérialisez strong> p> Il existe deux classes de MailMessage dans .NET. Le premier est dans l'espace de noms System.Web.Mail et est obsolète dans .NET 2.0 et versions ultérieures et le second est disponible en System.Net.Mail. Je ne montrer que je me soucie pas de l'obsolète si juste comment vous pouvez sérialiser instances de la classe System.Net.Mail.MailMessage. P> Pour sérialiser les propriétés d'un objet MailMessage vous pouvez créer une nouvelle classe et créer une propriété de type MailMessage pour elle qui intègre votre MailMessage dans la classe. Dans cette nouvelle classe, vous pouvez mettre en œuvre l'interface IXmlSerializable pour sérialiser manuellement son MailMessage. P> sérialisation strong> p> côté sérialisation du travail est aussi simple que la mise en œuvre de la méthode WriteXML. Le Code ci-dessous est ce que j'ai écrit pour le faire. P> public XmlNode GetConfigSection(XmlDocument xml, string nodePath)
{
return xml.SelectSingleNode(nodePath);
}
Où essayez-vous de le sérialiser?
J'essaie de le mettre dans un tableau d'octets.