【问题标题】:Converting c# data from entity framework to a valid json type将 c# 数据从实体框架转换为有效的 json 类型
【发布时间】:2013-09-23 11:15:08
【问题描述】:

我有以下方法:

    [HttpPost]
    public ActionResult GetData()
    {
        var data= (dynamic)null;
        using (DBContext context = new DBContext())
        {
            data= context.MyObject.Where(i=> i.TypeId == 1).OrderBy(k => k.Name).Select(w => new
            {
                description = w.Description
            }).ToList();       
        }

        return Json(data, JsonRequestBehavior.AllowGet);
    }

所以我想将数据正确转换为 json 对象,但我不确定我是否做得正确。返回的数据应该在 javascript 中使用。

我有很多谷歌,我找到了下面的例子,也许我应该做类似的事情,但我不知道怎么做:

var keyValues = new Dictionary<string, string>
               {
                   { "emailSend", textBox1.Text },
                   { "toEmail", textBox2.Text }
               };

JavaScriptSerializer js = new JavaScriptSerializer();
string json = js.Serialize(keyValues);
MessageBox.Show(json);

【问题讨论】:

  • 使用Newtonsoft.Json!
  • 您的代码将返回Json?您在控制器中调用Json()。这会将您的对象转换为 Json。不需要其他任何东西。
  • 我应该返回 json 数据,但我不确定我是否从控制器正确完成。
  • MessageBox.Show 是一种 windows 方法,在 ASP.Net 中也不起作用
  • return Json(data, JsonRequestBehavior.AllowGet); 是正确的方式

标签: c# javascript asp.net-mvc json serialization


【解决方案1】:

您不应该使用任何JavaScriptSerializer。就像你已经做的那样返回Json。这是从控制器操作向客户端发送 JSON 的正确方法。您作为参数传递的模型将由框架自动序列化为 JSON 字符串。此外,您不需要设置JsonRequestBehavior.AllowGet,因为您的控制器操作用[HttpPost] 属性装饰,这意味着它只能使用POST 动词调用,而不能使用GET。这仅对返回 JsonResult 并且可以使用 GET 动词调用的控制器操作是必需的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-16
    • 2023-03-27
    • 1970-01-01
    相关资源
    最近更新 更多