独立或作为字符串序列化嵌入式类 /对象



我正在为此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>

最新更新