【问题标题】:Mongo db C# serializationMongodb C# 序列化
【发布时间】:2012-02-14 18:45:43
【问题描述】:

我正在尝试使用 Mongo Db 的 10gen C# 驱动程序编写以下代码。我在这里想要实现的是编写一个简单的适配器,以便无缝缓存 C# 对象。

RegisterClassMap() 无法识别类合同中的 CacheId 字段。我在 MapIdField api 上找不到足够的文档。

有人可以帮忙吗?提前致谢!!

public interface ICacheable
{
    byte[] CacheId { get; }
}

public class Contract : ICacheable
{
    public byte[] CacheId { get; set; }

    public string Name { get; set; }

    public string Description { get; set; }
}

public class MongoCacheStore
{
    private void RegisterClass<T>() where T : class, ICacheable
    {
        if (!BsonClassMap.IsClassMapRegistered(typeof(T)))
        {
            BsonClassMap.RegisterClassMap<T>();

            BsonClassMap.RegisterClassMap<T>(cm =>
            {
                cm.AutoMap();
                **cm.MapIdField("CacheId");**
            });
        }
    }
}

【问题讨论】:

  • 我也改变了 cm.MapIdField("CacheId");到 cm.MapIdField("Id");并将 Id 声明为 long 数据类型。但它仍然无法识别 Id。所以与不能识别字节数组id字段无关

标签: c# serialization mongodb mongodb-.net-driver


【解决方案1】:

以下内容对我有用:

public class MongoCacheStore
{
    public void RegisterClass<T>() where T : class, ICacheable
    {
        BsonClassMap.RegisterClassMap<T>(cm =>
        {
            cm.AutoMap();
            cm.MapIdProperty("CacheId");
        });
    }
}

您必须使用 MapIdProperty 而不是 MapIdField,因为 CacheId 是一个属性。

您的意思是在界面中没有设置访问器吗?

另外,如果您安排只调用一次 RegisterClass 而不是每次都测试 IsClassMapRegistered 会好得多。一方面,我不认为它是线程安全的(两个线程都可能从调用 IsClassMapRegistered 中得到错误的返回,其中一个在调用 RegisterClassMap 时会失败)。

【讨论】:

  • 感谢罗伯特回复。是的,我的意思是不要在界面中设置访问器。无论如何,我是否有可能使用 CacheId 作为该文档的 _id 字段但不对其进行序列化。像这样code public class MongoCacheStore { public void RegisterClass() where T : class, ICacheable { BsonClassMap.RegisterClassMap(cm => { cm.AutoMap(); cm.MapIdProperty("CacheId") ; ** cm.SkipFromSerialization("CacheId"); }); } }
  • 请原谅我上面的评论没有缩进
  • 即使您要配置类映射以使_id 不序列化,服务器仍会在您插入文档时添加一个。 _id 字段是必需的。
猜你喜欢
  • 2018-07-05
  • 1970-01-01
  • 2022-01-02
  • 1970-01-01
  • 2017-06-12
  • 1970-01-01
  • 1970-01-01
  • 2013-11-09
  • 1970-01-01
相关资源
最近更新 更多