[英]convert c# string[] to json
我有一个方法可以将string []返回到控制器动作,并且该动作返回JsonAction,如下所示:
// GET: Locations/Get
[HttpGet]
public async Task<JsonResult> Get(string lotNumber)
{
var result = await this.MakeApiCall("/locations?lotNumber=" + lotNumber);
return Json(result, JsonRequestBehavior.AllowGet);
}
在我的Javascript中,如果执行此操作:
core.get(locationsApi + "?lotNumber=" + core.getParameterByName("lotNumber"), function (response) {
var r = JSON.parse(response);
console.log(r);
});
我看到一个看起来像这样的字符串:
[ “BA01A1”, “BA01A2”, “BA01A3”]
但是,这似乎是一个字符串,因为如果我这样做:
core.get(locationsApi + "?lotNumber=" + core.getParameterByName("lotNumber"), function (response) {
var r = JSON.parse(response);
var r = JSON.parse(r);
console.log(r);
});
它实际上返回一个数组。...我如何才能在开始时返回该数组,或者至少返回只需要解析一次的东西?
听起来像是从MakeApiCall
返回的var result =
的类型是string
类型,但是包含["BA01A1","BA01A2","BA01A3"]
,它实际上是序列化的JSON。
您可以通过将鼠标悬停在var
并查看其类型,然后使用调试器查看从API调用返回的实际值来确定这一点。
然后,当您使用Json(result, JsonRequestBehavior.AllowGet);
返回该序列化JSON时Json(result, JsonRequestBehavior.AllowGet);
该字符串将被序列化为另一个JSON表示形式。
本质上,它已经被双重序列化了。
使用此功能时,客户端的result.length == 3,即数组的预期长度。
public ActionResult GetAnswer(string question)
{
var answer = @"[""BA01A1"",""BA01A2"",""BA01A3""]";
return Content(answer, "text/javascript");
}
// javascript result.length returns 3
相反,当您使用Json帮助器时,您会得到一个包含28个字符的字符串,因为Json帮助器假定您传递的对象应该进行序列化,但是问题是,您已经有一个数组,该数组表示为序列化的字符串:
public ActionResult GetAnswer(string question)
{
var answer = @"[""BA01A1"",""BA01A2"",""BA01A3""]";
return Json(answer);
}
// javascript result.length returns 28
这个小提琴证明了这一点。
https://dotnetfiddle.net/NCAPkh
TLDR在您的情况下, var result
可能已经是JSON序列化对象的字符串表示形式,并将其传递给Json(
helper然后再次对其进行序列化。因此,客户端必须对序列化两次。
您有两个选择,要么将API调用中的字符串反序列化为C#对象列表,然后将该对象列表传递给return Json(someObject...
或者将其作为Content类型返回为JSON(如上所示)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.