Serialization 同时使用Microsoft.Web.RedisSessionStateProvider和Microsoft.Web.RedisOutputCacheProvider

Serialization 同时使用Microsoft.Web.RedisSessionStateProvider和Microsoft.Web.RedisOutputCacheProvider,serialization,session-state,outputcache,redis-cache,Serialization,Session State,Outputcache,Redis Cache,我已经安装并使用了Microsoft.Web.RedisSessionStateProvider一段时间,在查看OutputCaching之后,我也考虑安装Microsoft.Web.RedisOutputCacheProvider,但它们都有Microsoft.Web.Redis.ISerializer接口,这会在使用ISerializer接口时中断我的JsonCacheSerializer 我在VS 2017中遇到了一个错误,上面写着 “Microsoft.Web.RedisOutputCa

我已经安装并使用了Microsoft.Web.RedisSessionStateProvider一段时间,在查看OutputCaching之后,我也考虑安装Microsoft.Web.RedisOutputCacheProvider,但它们都有Microsoft.Web.Redis.ISerializer接口,这会在使用ISerializer接口时中断我的JsonCacheSerializer

我在VS 2017中遇到了一个错误,上面写着

Microsoft.Web.RedisOutputCacheProvider和Microsoft.Web.RedisSessionStateProvider中都存在类型‘ISerializer’

我用于SessionState的JsonCacheSerializer代码是:

public class JsonCacheSerializer : Microsoft.Web.Redis.ISerializer
{
    private static readonly JsonSerializerSettings Settings = new JsonSerializerSettings()
    {
        TypeNameHandling = TypeNameHandling.All,
        ReferenceLoopHandling = ReferenceLoopHandling.Serialize,
        PreserveReferencesHandling = PreserveReferencesHandling.Objects,
        Error = (serializer, err) => {
            err.ErrorContext.Handled = true;
        }
    };

    public byte[] Serialize(object data)
    {
        return Encoding.UTF8.GetBytes(JsonConvert.SerializeObject(data, Settings));
    }

    public object Deserialize(byte[] data)
    {
        return data == null ? null : JsonConvert.DeserializeObject(Encoding.UTF8.GetString(data), Settings);
    }
}

这是否意味着一个必须使用一个或另一个,而不是两者都使用?

您可以使用C#的外部别名功能

Visual Studio示例: 1) 右键单击Microsoft.Web.RedisOutputCacheProvider并将以下内容放入别名字段:

global,redisoutputcacheprovider
global,redissessionstateprovider
2) 右键单击Microsoft.Web.RedisessionStateProvider并将以下内容放入别名字段:

global,redisoutputcacheprovider
global,redissessionstateprovider
然后在代码文件的顶部添加:

extern alias redissessionstateprovider;
extern alias redisoutputcacheprovider;
最后将您的类声明为:

public class JsonCacheSessionStateSerializer : redissessionstateprovider::Microsoft.Web.Redis.ISerializer