我正在为此ASP.NET WebAPI输出缓存实现MongoDB缓存(我同意REDIS会更好/更快,但目前,我需要MongoDB实现!)
))无论如何,
我有一个CachedItem
类,可以保留我的密钥/值:
[BsonIgnoreExtraElements]
public class CachedItem
{
[BsonElement("key")]
public string Key { get; set; }
[BsonElement("value")]
public object Value { get; set; }
}
值是一个对象,可能是任何东西,我们不控制它。
在我的一个测试中,我有一个非常简单的poco:
public class UserFixture
{
public UserFixture()
{
Id = Guid.NewGuid();
}
public Guid Id { get; set; }
public string Name { get; set; }
public DateTime DateOfBirth { get; set; }
}
将其设置为Value
时,它已被序列化并持续。
当我尝试检索它时,它将无法进行挑选,因为它自动抓住了" ID"属性。
当webapi.outputcache.mongodb.tests.userfixture的iD属性的质疑时,发生了错误
显然,我无法装饰UserFixture
有什么办法可以告诉MongoDB驱动程序基本上序列化cacheditem.value,如说,一个字符串?
i 可以在保存之前使用json.net进行此操作,并在返回途中对其进行验证,但我希望避免这种情况。
也在github上如果您想尝试失败的测试,该链接应将您直接带到相关的提交。
您当然可以告诉MongoDB
通过构建自己的自定义BsonSerializer
来序列化类别为字符串。我发现从其BsonStringSerializer
继承更容易。您还需要用特定类型注册该序列化器。(我建议对此使用BsonSerializationProvider
)
您需要考虑的是如何将所有可能的数据表示为字符串,以便您可以将其归为应用程序(例如,考虑您可能需要保存类型信息)。
<</p>