0

私は電子メールクラスを持っています

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;

どんな助けでも

4

2 に答える 2

0

シリアル化する型は、シリアル化可能である必要があります。

DataContractJsonSerializerこれは、クラス ( EmailInfo) を属性で装飾し、そのDataContractメンバー (シリアル化された文字列に含めたいものだけ) を属性で装飾する必要があることを意味しDataMemberます。

ただし、あなたの場合、MailAddressシリアライズできないサードパーティのタイプやその他のタイプを参照しているため、何らかのタイプのカスタムシリアライゼーションを提供する必要があり、DataContractJsonSerializer.

JSON シリアル化の柔軟性を大幅に向上させる Json.NETライブラリをご覧ください。JsonConverter. この Web サイトで良い例を見つけることができます。

于 2014-05-12T07:08:41.090 に答える