2011-12-16 4 views
1

匿名クラスのリスト<をキャッシュに入れることができません。Azure appfabricキャッシュ、LinqからSQLへの匿名クラスのシリアライズの問題

var cache = new DataCacheFactory().GetCache("default"); 
var parts = somethingIQueryable.Select(i => new { i.s1, i.s2 }); 
cache.Put("somekey", parts.ToList(), TimeSpan.FromMinutes(2)); 

これは、シリアル化例外をスローします。私はこのようなクラスにデータを置く場合は、それは動作します:

public class A { public string s1, public string s2 }  

var cache = new DataCacheFactory().GetCache("default"); 
var parts = somethingIQueryable.Select(i => new A { s1 = i.s1, s2 = i.s2 }); 
cache.Put("somekey", parts.ToList(), TimeSpan.FromMinutes(2)); 

私はむしろかかわらず、キャッシュに入ったデータのすべての少しのためのクラスを定義する必要はないだろう、とへの道があるかどう思っていました最初の例を動作させますか?

答えて

3

匿名型をシリアル化してこのようなキャッシュに格納することはできません。残念ながらList<A>を作成して保存する必要があります。

これは、シリアライズとデシリアライズを行うために匿名型と比較するものがないためです。単純に、匿名型は名前のとおり匿名型なので、匿名型が何であるかを知る方法がありません。

+0

Booo。 ASP.Netキャッシュはそれをうまく処理することができますが、それはシリアル化など何もせずにオブジェクト自体をメモリに格納することを意味します。 – Toodleey

+0

私はこれが正しいと信じています。 – ChrisBint

+1

..もちろん、メモリに格納する利点(シリアル化する必要はありません)は非常に不利です - キャッシュはプロセス全体で共有されず、耐久性が低く、Webサーバー上のメモリ圧迫などですオプションを重視して電話をかけるだけです... –

関連する問題