簡體   English   中英

從BSON序列化為JSON

[英]Serialize to JSON from BSON

我正在嘗試將從MongoDB返回的一些BSON序列化為JSON:

var bson = MongoDB.Bson.BsonDocument.Parse(@"{
    ""_id"": ObjectId(""5a45a64ec7fe121dfc673c6f""),
    ""MyOtherId"": ObjectId(""5a45a64dc7fe121dfc673c6e""),
    ""Blah"": ""Test""
}");

而且我想將ObjectID轉換為字符串,以便得到

"_id": "5a45a64ec7fe121dfc673c6f",

代替

"_id": {"$oid": "5a4597a3d999f209e05df993"},

所以我嘗試了這個:

var result = Newtonsoft.Json.JsonConvert.SerializeObject(bson, new Newtonsoft.Json.Bson.Converters.BsonDataObjectIdConverter());

但是我得到一個錯誤:

Newtonsoft.Json.JsonSerializationException:'從'MongoDB.Bson.BsonObjectId'上的'AsBoolean'獲取值時出錯。

內部異常:InvalidCastException:無法將類型為“ MongoDB.Bson.BsonObjectId”的對象轉換為類型為“ MongoDB.Bson.BsonBoolean”的對象。

簡化版本仍然出現錯誤:

var result = Newtonsoft.Json.JsonConvert.SerializeObject(bson);

使用Newtonsoft.Json v10.0.3和MongoDB.Driver v2.5.0

Newtonsoft嘗試將對象的每個屬性讀入Json值。 因此,如果您的對象具有public string Lol {get { throw new Exception}} ,Newtonsoft將嘗試讀取Lol ,獲取異常,並且序列化失敗。

現在,Bson值具有許多屬性,例如AsBooleanAsString ,如果實際值不是他們期望的值, AsString拋出異常。 Mongo希望您知道bson中包含什么值並訪問適當的屬性。 但是由於Newtonsoft嘗試訪問所有屬性,因此您會收到該錯誤。

您可以通過為BsonValue編寫自定義轉換器並將其傳遞給SerializationSettings中的Newtonsoft來解決此問題。 您的轉換器將需要在getBsonType()上調用getBsonType() ,然后調用正確的AsBooleanAsInt或任何其他方法來獲取實際值。

暫無
暫無

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

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