我正在使用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);
}