如何序列化邮件?

Mid*_*one 11 .net asp.net email serialization

当使用los foratter绑定一个mial消息时,我得到以下内容.

错误:Sys.WebForms.PageRequestManagerServerErrorException:序列化'System.Net.Mail.MailMessage'类型的值'System.Net.Mail.MailMessage'时出错.

是否有一种简单的方法来序列化这个对象,或者我是否需要单独地对每个ohhte属性进行分类?

Ste*_*nan 5

我知道这是一篇较旧的帖子,但我也遇到了需要序列化 ​​MailAddress 类的问题,因此我创建了一个可序列化的版本。如果您可以使用自定义 MailAddress 类而不是 System.Net.Mail.MailAddress 类,那么这可能适合您。

/// <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)))
    {
    }
}
Run Code Online (Sandbox Code Playgroud)


Chr*_*Rea 1

遗憾的是,System.Net.Mail.MailMessage 类未标记为可序列化。所以,是的,你需要自己做。下面的博客文章中描述了一种技术,可以让您了解如何继续: 如何序列化 MailMessage ...基本上,您需要单独提取每个属性。引用:

要序列化 ​​MailMessage 对象的属性,您可以创建一个新类并为其创建一个 MailMessage 类型的属性,以将 MailMessage 嵌入到该类中。在这个新类中,您可以实现 IXmlSerializing 接口来手动序列化其 MailMessage。在这里,我创建了这个类并将其命名为 SerializedMailMessage [...]

[WriteXml() 和 ReadXml() 方法的代码实现如下;见源链接]