我有一个电子邮件课程
public class EmailInfo
{
public MailAddress SenderEmailAddress { get; set; }
public MailAddressCollection ReceiverEmailAddress { get; set; }
public MailAddressCollection CCEmailAddress { get; set; }
public MailAddressCollection BCCEmailAddress { get; set; }
public AttachmentCollection Attachment { get; set; }
public string Subject { get; set; }
public DateTime EmailDate { get; set; }
}
当我尝试序列化类型EmailInfo的列表时。我收到了以下错误
Type 'System.Collections.Generic.List`1[[Darena.EmailParser.EmailInfo, Darena.EmailParser, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]' with data contract name 'ArrayOfEmailInfo:http://schemas.datacontract.org/2004/07/Darena.EmailParser' 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.
我正在使用
进行序列化 DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(EmailInfo));
MemoryStream ms = new MemoryStream();
ser.WriteObject(ms, emailInfos);
string jsonString = Encoding.UTF8.GetString(ms.ToArray());
ms.Close();
return jsonString;
任何帮助
答案 0 :(得分:0)
您要序列化的类型必须是可序列化的。
对于DataContractJsonSerializer
,这意味着您必须使用EmailInfo
属性及其成员(只是那些要包含在序列化字符串中的成员)装饰您的类(DataContract
)DataMember
} attribute。
但是,在您的情况下,您引用的是第三方类型,例如MailAddress
和其他不可序列化的类型,因此您必须提供某种类型的自定义序列化,而且它对DataContractJsonSerializer
非常有限。
查看Json.NET库,它为JSON序列化提供了更大的灵活性,例如。 JsonConverter
。你会在这个网站上找到很好的例子。
答案 1 :(得分:0)
List无法支持序列化。您可以使用对象[]而不是List。