问题描述
||
嗨,我将其作为我的控制器之一:
[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,驱动程序自动连接
不要打电话断开连接,它会干扰
与连接池