嗨,我有这个作为我的控制员之一:
[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对象的地方。
答案 0 :(得分:0)
return Json(myObject)
语句应该将一个被序列化为JSON的对象作为字符串返回给浏览器,但是通过调用ToJson()
,rslt.CoordinatesObj
对象将被序列化两次。
也有可能CoordinatesObj
没有被正确去除,因此它会抛出异常,因为在空对象上调用了ToJson()
。
Frames
类应该类似于处理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; }
}
}
答案 1 :(得分:0)
如果FindOne找不到匹配的文档,则返回null,因此在代码示例中,“rslt”变量完全可以为null。
此外: