2011-05-31 46 views
1

您好我有這個作爲我的控制器之一:如何檢索蒙戈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()); 
    } 

蒙戈對象看起來是這樣的:

{"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; 
}); 

我不認爲我這樣做的權利,我想我t與我返回json對象的方式有關。我不斷收到此錯誤:{「不設置到對象的實例對象引用」}

身在何方,我返回JSON對象。

+0

你不嘗試的toJSON方法?像這樣:return Json(rslt.CoordinatesObj); – elranu 2011-05-31 02:13:03

+0

@elranu是我嘗試過,但仍然是相同的錯誤 – anthonypliu 2011-05-31 03:58:41

回答

0

return Json(myObject)語句應該將一個對象序列化爲JSON,然後作爲字符串返回到瀏覽器,但通過調用ToJson()對象將被序列化兩次。

這也有可能CoordinatesObj沒有正確deserislised,所以它是拋出一個例外,因爲ToJson()被稱爲一個空對象。 的Frames類應該是這個樣子來處理deserialising的CoordinatesObj陣列:

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; } 
    } 
} 
0

如果FindOne沒有找到匹配的文件返回null,所以你的代碼示例中是完全可能的「的rslt」變量爲null。

另外:

  1. 不需要調用連接,驅動程序會自動連接
  2. 不要」調用Disconnect,它干擾 與連接池