gpt4 book ai didi

c# - Mongo DB - List 嵌套在 Dictionary 中的问题 - c# Driver

转载 作者:太空宇宙 更新时间:2023-11-03 14:15:53 25 4
gpt4 key购买 nike

从 MongoDB 检索文档时出现以下错误:

"Unable to determine actual type of object to deserialize. NominalType is System.Object and BsonType is Array."

我正在序列化的对象有一个 Dictionary<string, object>属性(property)。我可以在字典中放入一个简单的字符串并将其拉出而不会出现错误,但是如果有 List<string>然后我得到反序列化错误。

我使用的是官方 C# 驱动程序 (v 1.1)。我可以使用 Mongo shell 很好地查询文档,所以我很确定这是 MongoDB.Bson 的问题。

有什么建议/解决方法吗?

请求的代码示例:

保存到 MongoDB 的示例对象:

public class WebUser
{
public int _id;
private DateTime startTime;
private DateTime stopTime;
private string browser;
private string sessionID;
private string ip;
public List<PageView> PageViews;
public Dictionary<string, Object> Session;

public Save(){/*Data access code here*/}
public static Single(int id){/*Data access code here*/}
}

数据访问代码:

public T Single<T>(int id) where T : class, new()
{
var server = MongoServer.Create(ConnectionString);
var db = server.GetDatabase(DBName);
var collection = db.GetCollection<T>(typeof(T).Name);
var value = collection.FindOneById(id);
server.Disconnect();
return value;
}

这很好用:

var wu = WebUser.single(1);
wu.Session.Add("string key", "value");
wu.Session.Add("int key", 1);
wu.Save();
wu = WebUser.single(1);

这是我遇到错误的地方:

var wu = WebUser.single(1);
wu.Session.Add("list of values", new List<string>() { "yada", "yada 2", "yada 3" });
wu.Save();
//deserialize error on the retrieve below
wu = WebUser.single(1);

最佳答案

我认为以下简单示例重现了该问题。使用类:

public class C {
public ObjectId Id;
public object Obj;
}

和下面的测试代码:

collection.RemoveAll();
var c = new C { Obj = new int[] { 1, 2, 3 } };
collection.Insert(c);

var r = collection.FindOneAs<C>(); // fails

问题是文档被序列化为:

> db.test.find()
{ "_id" : ObjectId("4e15b931e447ad6a54eb0114"), "Obj" : [ 1, 2, 3 ] }
>

并且“Obj”的值没有类型信息,因此反序列化器不知道要为“Obj”实例化哪个类。

我为此创建了一个 JIRA 票证:

https://jira.mongodb.org/browse/CSHARP-263

关于c# - Mongo DB - List<string> 嵌套在 Dictionary<string, object> 中的问题 - c# Driver,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6589310/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com