MongoDb存储对象的问题

时间:2019-03-08 02:21:19

标签: c# mongodb

尝试将一个字段作为对象存储在我的实体中。对象类型是不确定的,因为它可用于存储不同类型的对象。

调用它时,Web API会将其作为字典配对值接收。 一旦插入到MongoDb中,它将具有这些奇怪的_t和_v JsonObject字段。

有人可以阐明这个问题吗?

2 个答案:

答案 0 :(得分:1)

嘿,我设法自己解决了。

ExpandoObject是您需要发送到Web API的对象。最终将转换为字典

答案 1 :(得分:1)

如果将属性设为动态ExpandoObject而不是“ object”,则它将正确反序列化,然后可以将其插入mongodb中。最新的Mongo c#驱动程序支持动态。

例如

public class NotificationDTO
{
    public string Id { get; set; }
    public ExpandoObject CustomData { get; set; }
}

在DTO中将强类型用作ExpandoObjects您可以编写一个简单的扩展名,以帮助您将强类型转换为动态,如下所示:

public static dynamic ToDynamic<T>(this T obj)
{
    IDictionary<string, object> expando = new ExpandoObject();

    foreach (var propertyInfo in typeof(T).GetProperties())
    {
        var currentValue = propertyInfo.GetValue(obj);
        expando.Add(propertyInfo.Name, currentValue);
    }
    return expando as ExpandoObject;
}