相关疑难解决方法(0)

BinaryFormatter和Deserialization Complex对象

无法反序列化以下对象图.在BinaryFormmater上调用deserialize方法时发生异常:System.Runtime.Serialization.SerializationException:

The constructor to deserialize an object of type 'C' was not found.
Run Code Online (Sandbox Code Playgroud)

C上有两个构造函数,我认为问题可能是:序列化Binaryformatter使用参数化和反序列化过程,它需要一个无参数化的.有黑客/解决方案吗?对象:

  [Serializable]
    public class A
    {
        B b;
        C c;

        public int ID { get; set; }

        public A()
        {
        }

        public A(B b)
        {
            this.b = b;
        }

        public A(C c)
        {
            this.c = c;
        }
    }
    [Serializable]
    public class B
    {

    }
    [Serializable]
    public class C : Dictionary<int, A>
    {
        public C()
        {

        }

        public C(List<A> list)
        {
            list.ForEach(p => this.Add(p.ID, p));
        }
    }
Run Code Online (Sandbox Code Playgroud)

//序列化成功 …

c# binaryformatter

23
推荐指数
1
解决办法
3万
查看次数

通过缓存中的值获取对象

抽象

我正在编写一个具有一些对象缓存的应用程序.它需要工作的方式是从缓存中检索对象时:

object foo = CacheProvider.CurrentCache.Get("key");
Run Code Online (Sandbox Code Playgroud)

foo应该是原始对象的本地副本,而不是引用.实现这个的最佳方法是什么?到目前为止,我唯一想到的方法是使用BinarySerializer来创建副本,但我觉得我错过了一个更好的方法.

细节

缓存实现的支持是任意的,因为它是基于提供程序的.我需要支持任何数量的缓存,从HttpRuntime缓存到类似Velocity.这里的重点是缓存支持和使用者代码之间的层 - 该层必须确保返回对象的副本.一些缓存已经可以做到这一点,但有些不会(HttpRuntime缓存是一个).

.net c# caching

11
推荐指数
1
解决办法
4480
查看次数

标签 统计

c# ×2

.net ×1

binaryformatter ×1

caching ×1