3

問題:クラスのインスタンスをキャッシュしてすぐにキャッシュから戻すと、オブジェクトは元に戻ります(nullではありません)が、そのすべてのプロパティ/フィールドがnullまたはデフォルトです。

    _cacheHelper.PutInCache("testModuleControlInfoOne", mci);
    //mci has populated fields

    var mciFromCacheOne = _cacheHelper.GetFromCache("testModuleControlInfoOne");
    //mciFromCacheOne now has null or default fields

そのため、オブジェクトの構造が問題であり、AppFabricが何らかの理由でオブジェクトを適切にシリアル化していないのではないかと思います。

ただし、次のシリアル化メソッドを使用すると、シリアル化前のすべてのプロパティ/フィールドを含むオブジェクトが返されます。

    public T SerializeThenDeserialize<T>(T o) where T : class
    {
            BinaryFormatter bf = new BinaryFormatter();

            using (MemoryStream ms = new MemoryStream())
            {
                bf.Serialize(ms, o);

                ms.Position = 0;

                return (T)bf.Deserialize(ms);
            }
    }

オブジェクトがバイナリフォーマッタを使用して適切にシリアル化および逆シリアル化する方法と、キャッシングを介してまったく同じことを行わない方法はありますか?

誰かがこれに遭遇したことがありますか、または誰かが一般的に何に注意すべきかについての提案やヒントがありますか?

4

3 に答える 3

1

わかりました。

オブジェクトは IXmlSerializable を実装したため、AppFabric は通常のシリアル化の代わりにそれを使用しました。

XmlSerializer (BinaryFormatter ではなく) を介して実行すると、経験していたのと同じ null フィールドが得られます。

IXmlSerializable の実装に問題があるようです。

于 2010-09-17T02:02:05.033 に答える
1

(IXmlSerializable を使用して) Xml にシリアル化すると、オブジェクトのプライベート フィールドが無視されるため、取得時にオブジェクトが不完全になった可能性があります。

Binary Serialization を使用すると、オブジェクト全体 (他のオブジェクトへの参照を含む) が確実に含まれます。

于 2010-09-17T13:25:29.680 に答える
0

あなたは見たいかもしれませんIDataCacheObjectSerializer

http://msdn.microsoft.com/en-us/library/windowsazure/hh552969.aspx

AppFabricキャッシング-すべてのオブジェクトに使用されるシリアル化スタイルを指定できますか?

(はい、私はこの質問もあなたのものであったことを理解しています:-)

于 2013-02-23T06:37:57.360 に答える