在asp.net mvc中使用匿名类型与Json()方法有什么问题吗?
我最近遇到了一个问题,即当返回给jQuery调用者时,从Linq .First()返回一个匿名类型是行不通的。我在我的控制器中创建了一个简单的子类,并从查询对象中创建了简单的值,这似乎是序列化并且工作正常。
这有效:
public class JsonJob
{
public int Id { get; set; }
public string Title { get; set; }
public string Description { get; set; }
public DateTime DateAdded { get; set; }
public DateTime? DateModified { get; set; }
};
var jsonJob = from job in db.Jobs
where job.Id == jobId
select new JsonJob
{
Id = job.Id,
Title = job.Title,
Description = job.Description,
DateAdded = job.DateAdded,
DateModified = job.DateModified
};
return Json(jsonJob.First());
但这不是:
var jsonJob = from job in db.Jobs
where job.Id == jobId
select job;
return Json(jsonJob.First());
答案 0 :(得分:2)
您的第二个查询未返回匿名类型。它可能返回一个实体类型(由DataContext
代码生成器从DBML文件生成),这可能有很多你不喜欢的东西。返回匿名类型不应该导致问题,因为Json
方法根本不关心类型名称:
// anonymous type example:
var jsonJob = from job in db.Jobs
where job.Id == jobId
select new { // Note that no class name is specified here
job.Id,
job.Title,
job.Description,
job.DateAdded,
job.DateModified
};
答案 1 :(得分:2)
我知道这是一个旧的,但我有这个问题,这是谷歌的第一个解决方案;它与匿名类没有关系 - 只是因为我忘了用AllowGet返回我的结果,例如。
return Json(result, JsonRequestBehaviour.AllowGet);
虽然它不会引发C#错误,但您可以在Global.asax.cs的Application_Error()函数中轻松确认这一点,或者在Fiddler中看到500错误。