簡體   English   中英

Mongo DB - 列表問題<string>嵌套在字典中<string, object> - c# 驅動程序</string,></string>

[英]Mongo DB - Issue with a List<string> Nested in a Dictionary<string, object>- c# Driver

從 MongoDB 檢索文檔時出現以下錯誤:

“無法確定要反序列化的 object 的實際類型。NominalType 是 System.Object,BsonType 是 Array。”

我正在序列化的 object 具有Dictionary<string, object>屬性。 我可以在 Dictionary 中放入一個簡單的字符串並將其拉出而不會出現錯誤,但如果存在List<string>則會出現反序列化錯誤。

我正在使用官方的 c# 驅動程序(v 1.1)。 我可以使用 Mongo shell 很好地查詢文檔,所以我很高興這是 MongoDB.Bson 的問題。

有什么建議/解決方法嗎?

根據要求的代碼示例:

示例 object 被保存到 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);

我認為以下簡單示例重現了該問題。 使用 class:

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”實例化什么 class。

我為此創建了一張 JIRA 票證:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM