从控制器返回动态 json对象 ASP.NET

本文关键字:对象 ASP NET json 动态 控制器 返回 | 更新日期: 2023-09-27 18:32:27

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

我试过这个:

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

但结果是这样的:

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

我知道我可以这样做:

var result = new{...};

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

从控制器返回动态 json对象 ASP.NET

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

就像使用 JSON.NET

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

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

Dictionary<string,string>呢?

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

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

而且(我不知道为什么)在return Json() ApiController中没有正确序列化

我的情况只有助于定义静态类型并在返回之前序列化到它

这不是

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

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