如何将db对象作为复杂的Json对象返回?
我想要做的是从人员列表中获取特定人员。我的帖子工作正常,我在控制器中找到我正在寻找的人为“chosenPerson”。之后,我想让这个人成为一个复杂的Json对象,用于我的视角。但在serializer.Serialize(chosenPerson)的东西似乎不工作,我得到该行的说法异常:如何将db对象作为复杂的Json对象返回?
An exception of type 'System.Reflection.TargetInvocationException' occurred in mscorlib.dll but was not handled in user code
其他信息:异常已通过调用的目标引发异常”
JS鉴于:
$.ajax({
type: 'POST',
url: '@Url.Action("ReturnPerson", "Home")',
contentType: 'application/json; charset=utf-8',
data: emailUnique,
error: function (event, jqxhr, settings, thrownError) {
console.log(event + " || " + jqxhr + " || " + settings + " || " + thrownError);
}
});
chosenPerson = $.getJSON('/Home/ReturnPerson/');
控制器:
[HttpPost]
public ActionResult ReturnPerson(string emailUnique)
{
var db = new CvAdminContext();
var chosenPerson= db.Persons.Where(p => p.Email == emailUnique);
JavaScriptSerializer serializer = new JavaScriptSerializer();
return Json(serializer.Serialize(chosenPerson), JsonRequestBehavior.AllowGet);
}
ÿ你有一些代码问题。我建议使用Newtonsoft.Json
来序列化Json。注意我已经删除了[HttpPost]
。控制器更改为:
public JsonResult ReturnPerson(string emailUnique)
{
var db = new CvAdminContext();
var chosenPerson= db.Persons.Where(p => p.Email == emailUnique).ToList();
return Json(JsonConvert.SerializeObject(chosenPerson), JsonRequestBehavior.AllowGet);
}
然后从你的客户端可以使用:
var email = "[email protected]";
// you could also use var email = @Model.Email; if view is strongly typed.
var chosenPerson = $.getJSON('/Home/ReturnPerson?emailunique=' + email, function(data) {
console.log(data);
});
我尝试了这个,并得到以下错误: “已经有一个打开的DataReader与此命令关联,必须先关闭它。” – ForTheLoveOfCode
如上所述,将'.ToList()'添加到linq查询或将'MultipleActiveResultSets = true;'添加到您的连接字符串中。 –
return语句现在可以工作并返回一个填充对象。然而,接收到的东西,如果有的话,似乎是一个空洞的对象。如何检查GET是否成功? – ForTheLoveOfCode
敢肯定你可以做'返回JSON(chosenPerson ...'和MVC会自动连载为你。你可能不得不把'.toList()'放在where之后,以强制它在尝试序列化之前运行EF查询。 – ADyson
@ADyson我试着这样做,并得到以下错误:“自引用循环检测到属性'Person' – ForTheLoveOfCode
selectedPerson对象是否具有名为Person的属性,它也是同一类型?请参阅此处的潜在解决方案:h ttp://stackoverflow.com/questions/7397207/json-net-error-self-referencing-loop-detected-for-type – ADyson