如何检索mongo db对象并将其作为json对象返回

问题描述

|| 嗨,我将其作为我的控制器之一:
[HttpPost]
        public JsonResult GetPinPoints(string Id)
    {
        Frames rslt = null;

        string connString = ConfigurationManager.ConnectionStrings[\"MongoConnStringNew\"].ToString();
        MongoUrl murl = new MongoUrl(connString);
        MongoServer mgconf = new MongoServer(murl);
        try
        {
            mgconf.Connect();
            MongoDatabase frmlydb = mgconf.GetDatabase(\"framely\");
            MongoCollection<Frames> collection = frmlydb.GetCollection<Frames>(\"Frames\");
            ObjectId oid = new ObjectId(Id);
            Frames frms = collection.FindOne(Query.EQ(\"_id\",oid));

            if (frms != null)
            {
                rslt = frms;
            }
        }
        catch (Exception ex)
        {
        }
        finally
        {
            mgconf.disconnect();
        }

        return Json(rslt.CoordinatesObj.ToJson());
    }
mongo对象如下所示:
{\"MetaTagsObj\":{\"Meta1\":\"my fam\",\"Meta2\":\"lololo\",\"Meta3\":\"lulz\"},\"PictureID\":\"http://framely.s3.amazonaws.com/0b7a9a72-c61b-4dec-a814-40b003072e31.jpg\",\"UserID\":\"1\",\"CoordinatesObj\":[{\"Position\":1,\"Top\":182,\"Left\":20,\"Height\":73,\"Width\":90},{\"Position\":2,\"Top\":69,\"Left\":103,\"Height\":98,\"Width\":1...
我使用ajax jquery函数调用看起来像这样的控制器:
$(\"#mybutton\").click(function(){
           $.ajax({
                url: \'/Member/GetPinPoints\',type: \"POST\",dataType: \"json\",contentType: \"application/json; charset=utf-8\",success: function(data) {
            alert(data);
            },error: function() {

            alert(\"error\");
            }
            });


    return false;
});
我不认为我做对了,我认为这与我返回json对象的方式有关。我不断收到此错误: {\“你调用的对象是空的。\”} 就在我返回Json对象的位置。     

解决方法

        
return Json(myObject)
语句应使用一个对象,该对象将被序列化为JSON,然后作为字符串返回给浏​​览器,但是通过调用
ToJson()
rslt.CoordinatesObj
对象将被序列化两次。 也可能未正确反序列化
CoordinatesObj
,因此引发异常,因为在空对象上调用了
ToJson()
Frames
类应该看起来像这样来处理反序列化ising6ѭ数组:
public class Frames
{
    IEnumerable<Coordinate> CoordinatesObj { get; set; }

    public class Coordinate
    {
        int Position { get; set; }
        int Top { get; set; }
        int Left { get; set; }
        int Height { get; set; }
        int Width { get; set; }
    }
}
    ,        如果FindOne找不到匹配的文档,它将返回null,因此在您的代码示例中,\“ rslt \”变量完全有可能为null。 也: 无需调用Connect,驱动程序自动连接 不要打电话断开连接,它会干扰 与连接池