ASP.NET MVC:Json(IDictionary<string, string>) 转换为键值对数组



如果我有一个类似于以下内容的IDictionary<string, string> MyDictionary

{
    {"foo", "bar"},
    {"abc", "xyz"}
}

在我的MVC控制器中,我有一个这样的方法:

[HttpPost]
public JsonResult DoStuff()
{
    return Json(MyDictionary);
}

它会发回类似的信息

[
 {"Key":"foo", "Value":"bar"},
 {"Key":"abc", "Value":"xyz"}
]

我期待着(也想要)这样的东西:

{
 "foo":"bar",
 "abc":"xyz"
}

我怎样才能做到这一点?

更新

因此,这与以下事实直接相关:该项目是从使用自定义JSON序列化程序的ASP.NET 2.0应用程序升级而来的;显然,为了向后兼容性,他们将其作为MVC应用程序中的默认JSON序列化程序。最终,我用Json.NET的结果覆盖了控制器中的行为,我的问题得到了解决。

使用默认的Json序列化程序(Json.Net),它应该从Dictionary<string, string> 返回以下Json结构

{"Foo": "TTTDic", "Bar": "Scoo"}

使用您的行动方法:

[HttpPost]
public JsonResult DoStuff()
{
    var MyDictionary = new Dictionary<string, string>();
    MyDictionary.Add("Foo", "TTTDic");
    MyDictionary.Add("Bar", "Scoo");
    return Json(MyDictionary);
}

MVC5MVP6中验证了这一点。

如果你仍然有问题,为什么不用你想要的属性创建一个简单的POCO呢?

public class KeyValueItem
{
    public string Foo { set; get; }
    public string Abc { set; get; }
}

创建一个对象,设置属性值并将其作为JSON发送。

[HttpPost]
public JsonResult DoStuff()
{
  var item = new KeyValueItem
  {
      Foo="Bee",
      Abc="Scoo"
  };
  return Json(item );
}

相关内容

  • 没有找到相关文章

最新更新