从ASP.NET控制器返回动态jsonobject

时间:2016-01-28 14:02:52

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

我正在尝试从json字符串返回反序列化的动态对象。在运行时我不知道对象是什么样的,所以我不能输入它。

我试过这个:

var json = @"[{""clientNumber"":""3052394"",""accountStatus"":""Active""},{""clientNumber"":""1700630"",""accountStatus"":""Active""}]";
dynamic result = JsonConvert.DeserializeObject(json);
return Json(result, JsonRequestBehavior.AllowGet);

但结果是这样的:

[[[[]],[[]]],[[[]],[[]]]]

我知道我可以这样做:

var result = new{...};

但这不起作用,我不知道对象在运行时的样子。

4 个答案:

答案 0 :(得分:4)

Dictionary<string,string>怎么样?

var j = new Dictionary<string,string>();
j.Add("clientNumber","3052394");
j.Add("accountStatus","Active");
return Json(j, JsonRequestBehavior.AllowGet);

答案 1 :(得分:1)

因此,MVC控制器中的标准Controller.Json方法与动态类型有着奇怪的结合。

正如您使用JSON.NET进行反序列化一样,您最好还是使用JSON.NET进行序列化并返回字符串输出。

return Content(JsonConvert.SerializeObject(dynamicInstance), "application/json");

答案 2 :(得分:0)

这是因为JsonConvert.DeserializeObject(json)返回了JArray实例。

(我不知道为什么)无法在return Json()的{​​{1}}中正确地序列化

我的情况仅有助于定义静态类型并在返回之前将其序列化

答案 3 :(得分:-1)

这不是一个有效的JSON,因为你的JSONString中必须有很多"。我不知道这是否能解决你的问题,但试试这个:

var json = @"[{\"clientNumber\":\"3052394\",\"accountStatus\":\"Active\"},{\"clientNumber\":\"1700630\",\"accountStatus\":\"Active\"}]";