C#Redis接口集合反序列化 - 无法创建类型的实例

时间:2017-01-16 21:29:54

标签: c# deserialization stackexchange.redis

我正在使用C#StackExchange.Redis缓存,并且正在尝试缓存具有接口对象集合的对象。缓存工作正常,但反序列化会引发错误:

Could not create an instance of type IMyInterface. Type is an interface or abstract class and cannot be instantiated.

如果我自己处理反序列化,我知道我可以通过SO post创建自定义反序列化规则:

var obj = JsonConvert.DeserializeObject <MyParentClass>(json, new JsonSerializerSettings
{
    TypeNameHandling = TypeNameHandling.Auto,
    Binder = binder // write some custom deserialization rules
});

但是,我无法访问反序列化过程,因为它由Redis / Newtonsoft.Json处理。顺便说一下,我使用的是StackExchange.Redis 1.1.0.0和Newtonsoft.Json 9.0.0.0

我还发现了这个SO post,关于指定serialVersionUID,但是这是明确针对Java SO post中概述的。

那么我错过了什么或者我的选择是什么?提前谢谢!

以下是使用的示例代码:

public interface IMyInterface
{
    string Name { get; set; }
}

public class MyChildClassA : IMyInterface
{
    public string Name { get; set; }
}

public class MyChildClassB : IMyInterface
{
    public string Name { get; set; }
}

public class MyParentClass
{
    public IList<IMyInterface> Children { get; set; }
    // Assume proper init of list in constructor
}

public void DoStuff()
{
    var parentValue = new MyParentClass();
    // Assume parentValue.Children contains objects of both MyChildClassA and MyChildClassB

    // Works!
    MyCacheImplementation.Add<MyParentClass>(someKey, parentValue);
    // Does NOT work!
    MyCacheImplementation.Get<MyParentClass>(someKey);
}

0 个答案:

没有答案