0

我已经安装并使用了 Microsoft.Web.RedisSessionStateProvider 一段时间,在查看了 OutputCaching 之后,我还想安装 Microsoft.Web.RedisOutputCacheProvider,但是它们都有 Microsoft.Web.Redis.ISerializer 接口,这会破坏我的 JsonCacheSerializer,因为它使用 ISerializer界面。

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

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

4

1 回答 1

0

您可以使用 C# https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/extern-alias的外部别名功能

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

global,redisoutputcacheprovider

2)右键单击 Microsoft.Web.RedisSessionStateProvider 并将以下内容放入 Aliases 字段:

global,redissessionstateprovider

然后在您的代码文件顶部添加:

extern alias redissessionstateprovider;
extern alias redisoutputcacheprovider;

最后将您的课程声明为:

public class JsonCacheSessionStateSerializer : redissessionstateprovider::Microsoft.Web.Redis.ISerializer
于 2019-02-14T11:01:30.747 回答