javascript - 将 c# string[] 转换为 json

标签 javascript c# json

我有一个方法可以将字符串 [] 返回给 Controller 操作,并且该操作返回一个 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.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

这个 fiddle 演示了这一点。

https://dotnetfiddle.net/NCAPkh

TLDR 在您的情况下,var result 可能已经是 JSON 序列化对象的字符串表示形式,并将其传递给 Json( 帮助程序然后再次序列化。因此客户端必须反序列化两次。

您有两个选择,将来自 API 调用的字符串反序列化为 C# 对象列表,然后将该对象列表传递给 return Json(someObject... 或将其作为 JSON 类型的内容返回(如上所示)。

关于javascript - 将 c# string[] 转换为 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28552397/

相关文章:

c# - C# 7.0 中的表达式主体获取/设置访问器功能

python3 JSONDecodeError : Expecting value: line 1 column 1 (char 0)

javascript 闭包,谁能帮我理解为什么

javascript - 带有 ReactJS 和 Plyr 的 Vimeo API

c# - 使用委托(delegate) : Invalid token 'void' in class, 结构或接口(interface)成员声明时出错

json - Netty HTTPRequest 未捕获已发布的 JSOn

javascript - 如何将输入框(jade文件)中的值发送到脚本文件(app.js)

javascript - Ember js 在 willTransition 中转换为模型 id

javascript - jqplot转换为图像不显示y轴html

c# - 如何从服务器找出客户端的下载速度?