ASP.NET MVC中的匿名类型和JsonResult

时间:2009-09-24 22:35:57

标签: asp.net-mvc

在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());

2 个答案:

答案 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错误。