2012-05-03 22 views
4

サンプルアプリケーションには、セッション状態を辞書に保存するが、文字列以外の文字は保存しないSuspension Managerクラスが含まれています。SuspensionManager.SessionStateに文字列以外の文字を格納する

私は何かが、文字列を格納するたびに、その後、直列化を誘発する、私は次のエラー

型データコントラクト名「RuntimeTypeを持つ「System.RuntimeType」を取得します。http://schemas.datacontract.org/を2004/07/System 'は期待されていません。 DataContractResolverの使用を検討するか、KnownTypeAttribute属性を使用するか、DataContractSerializerに渡される既知の型のリストに追加するなど、既知の型のリストに静的に知られていない型を追加することを検討してください。

他のタイプをSessionStateに格納できるようにするために別の処理を行う必要がありますか?それが唯一の文字列型であるSessionManagerのコードを見て

答えて

8

「独自のロール」する必要があります推測:あなたはタイプを確実に、まず

を(de)シリアライズは、DataContract属性の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; } 
} 

第二に、あなたはそれをシリアル化(デ)しようとする前に、SessionManagerののAddKnownType<T>()(Tはあなたが必要とするタイプのもので)を呼び出す必要があります。

+0

2番目のステップでは、SuspensionManager.KnownTypes.Add(T)を意味しますか? – diadyne

+0

@diadyneどちらかの作品が信じています。 SuspensionManagerには、KnownTypes.Add(typeof(T))を呼び出すメソッドAddKnownType ()があります。 – ashleym

関連する問題