我想让 ASP.NET MVC 将存储在 MongoDB 中的文档作为 JSON 返回,但不需要先将其序列化为 .NET 类型。但是,BSONDocument.ToJSON() 返回如下所示的 JSON:
{_id:ObjectId("someid")}
浏览器的 JSON 解析器不喜欢“ObjectId(nnn)”,因此调用失败并出现解析器错误。我能够使用 Regex hack 获得可解析的 JSON:
public ActionResult GetFormDefinitionsJSON()
{
var client = new MongoDB.Driver.MongoClient(ConfigurationManager.ConnectionStrings["mongodb"].ConnectionString);
var db = client.GetServer().GetDatabase("formthing");
var result = db.GetCollection("formdefinitions").FindAll().ToArray();
var sb = new StringBuilder();
sb.Append("[");
var regex = new Regex(@"(ObjectId\()(.*)(\))");
var all = result.Select(x => regex.Replace(x.ToJson(), "$2"));
sb.Append(string.Join(",", all));
sb.Append("]");
return Content(sb.ToString(), "application/json");
}
这将返回可解析的 JSON:
{_id:"someid"}
但它闻起来。没有正则表达式和字符串构建hackery,有什么方法可以让官方的MongoDB驱动程序返回可以被浏览器解析的JSON?或者,我是否在浏览器端遗漏了一些允许 {_id:ObjectId("someid")} 被解析为有效的东西?