C# 序列化异常:不需要数据协定

C# 序列化异常:不需要数据协定,c#,serialization,C#,Serialization,将对象序列化为XML时,我收到以下异常消息: {"Type 'Alerter.EmailSender' with data contract name 'EmailSender:http://schemas.datacontract.org/2004/07/Alerter' is not expected. Consider using a DataContractResolver or add any types not known statically to the list of kno

将对象序列化为XML时,我收到以下异常消息:

{"Type 'Alerter.EmailSender' with data contract name  'EmailSender:http://schemas.datacontract.org/2004/07/Alerter' is not expected. Consider using a DataContractResolver or add any types not known statically to the list of known types - for example, by using the KnownTypeAttribute attribute or by adding them to the list of known types passed to DataContractSerializer."}
这是我试图将其对象序列化为XML文件的类:

namespace Alerter
{
  [DataContract]
  public class EmailSender : IAction
  {
    private EmailSetting _emailSetting;
    private SmtpClient _smtpClient;
    [DataMember]
    public bool IncludeFullDetails
    {
        get;
        set;
    }
    [DataMember]
    public string[] Receivers
    {
        get;
        set;
    }

    public EmailSender()
    {
        _emailSetting = new EmailSetting();
        SetupClient();
    }

    private void SetupClient()
    {
        // Some Logic
    }


    public void Report(LogDictionary logDictionary)
    {
       // Some Logic
    }
   }
 }
这是我用于序列化的代码:

 using (FileStream writer = new FileStream(fileName, FileMode.Create))
        {
            DataContractSerializer ser =
                new DataContractSerializer(typeof(List<Rule>));
            ser.WriteObject(writer, list);
        }
使用(FileStream writer=newfilestream(fileName,FileMode.Create))
{
数据序列化程序=
新的DataContractSerializer(typeof(List));
ser.WriteObject(writer,list);
}

非常感谢您的帮助。

请确保已使用以下命令将此
EmailSender
类指定为序列化程序的已知类型:

DataContractSerializer ser=新的DataContractSerializer(
类型(列表),
新[]{typeof(EmailSender)}
);
ser.WriteObject(writer,list);
之所以需要这样做,可能是因为在
规则
类的对象图中,您只对所有成员使用了
IAction
接口,而序列化程序甚至不知道
EmailSender
实现的存在

对于
规则
对象图中静态未知的所有其他类型,您应该执行相同的操作

DataContractSerializer ser = new DataContractSerializer(
    typeof(List<Rule>), 
    new[] { typeof(EmailSender) }
);
ser.WriteObject(writer, list);