4

サンプル アプリには、セッション状態をディクショナリに格納する Suspension Manager クラスが含まれていますが、文字列以外は何も格納しようとしません。

文字列以外のものを保存してからシリアル化をトリガーすると、次のエラーが発生します

データ コントラクト名 'RuntimeType:http://schemas.datacontract.org/2004/07/System' を持つ 'System.RuntimeType' を入力することは想定されていません。DataContractResolver の使用を検討するか、既知の型のリストに静的に認識されていない型を追加します。たとえば、KnownTypeAttribute 属性を使用するか、DataContractSerializer に渡される既知の型のリストにそれらを追加します。

他の型を SessionState に格納できるようにするために何か他のことをする必要がありますか?

4

2 に答える 2

8

次の 2 つのことを行う必要があります。

まず、(デ) シリアル化する型がDataContract属性 fromで装飾されているSystem.Runtime.Serializationことを確認し、そのメンバーが適切に装飾されていることを確認します。たとえば、c# の場合:

[DataContract]
public struct Product
{
     [DataMember]
     public Guid Id { get; set; }

     [DataMember]
     public DateTime ManufactureDate { get; set; }

     [DataMember]
     public decimal Cost { get; set; }  
}

AddKnownType<T>()次に、(デ) シリアル化を試みる前に、SessionManager を呼び出す必要があります(必要なタイプは T です)。

于 2012-08-02T13:52:07.613 に答える
0

SessionManagerコードを見ると、文字列型のみです。「自分でロールバック」する必要があると思います

于 2012-06-01T15:28:38.667 に答える