我正在尝试从json字符串返回反序列化的动态对象。在运行时我不知道对象是什么样的,所以我不能输入它。
我试过这个:
var json = @"[{""clientNumber"":""3052394"",""accountStatus"":""Active""},{""clientNumber"":""1700630"",""accountStatus"":""Active""}]";
dynamic result = JsonConvert.DeserializeObject(json);
return Json(result, JsonRequestBehavior.AllowGet);
但结果是这样的:
[[[[]],[[]]],[[[]],[[]]]]
我知道我可以这样做:
var result = new{...};
但这不起作用,我不知道对象在运行时的样子。
答案 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\"}]";