C#JSON字符串到JavaScript数组

C# JSON string to JavaScript array

本文关键字:数组 JavaScript 字符串 C#JSON      更新时间:2023-09-26

我在C#中有以下类:

public class Caption
{
    public string line;
    public string timestamp;
}

我创建了一些标题对象,并将它们添加到列表中:

List<Caption> CaptionList = new List<Caption>();
var obj = new Caption
{
  line = "Some text"
  timestamp = "00:10"
};
CaptionList.Add(obj);

然后,我使用Json.NET将列表序列化为Json,如下所示:

public string json = JsonConvert.SerializeObject(CaptionList);

现在我想把它用作JavaScript数组,所以我尝试了这个:

var arr = '<%=json%>';

我没有太多的JavaScript知识,但arr现在似乎是一个字符串,而不是数组,因为json实际上是一个C#字符串。我尝试使用arr[i].line等访问对象,但这不起作用。

如何使json成为JavaScript中的实际数组?

您可以使用JSON.parse方法将JSON字符串解析为数组:

var arr = JSON.parse('<%=json%>');

然而,由于JSON是JavaScript语法的一个子集,您实际上可以将JSON用作JavaScript数组文字:

var arr = <%=json%>;

将其作为演示

您的变量arr将按如下方式呈现。这将是字符串。因此,要将字符串转换为JSON对象,您需要解析该字符串。使用JSON.parse(arr)

var arr = '[ { "line":"Some text", "timestamp":"00:10" }, { "line":"Some text", "timestamp":"00:10" } ]';
var JObject= JSON.parse(arr);
Now you can access JObject[0].line

这会给你

"某些文本"

您可以查看Mozilla

我们使用MVC,在我们的视图(传递模型)中,每当我们想将模型转换为javascript对象时,我们都会使用一行简单的代码:

<script type="text/javascript">
        $(document).ready(function () {
            MyObject.Initialize(@Html.Raw(Json.Encode(Model)));
        });
</script>

所有这些的关键是:

@Html.Raw(Json.Encode(Model))

MVC忽略了"模型",但你可以很容易地做这样的事情:(Razor语法)

@{
   List<Caption> CaptionList = new List<Caption>();
   var obj = new Caption
   {
     line = "Some text"
     timestamp = "00:10"
   };
   CaptionList.Add(obj);
}

然后。。。

<script type="text/javascript">
        $(document).ready(function () {
            MyObject.Initialize(@Html.Raw(Json.Encode(CaptionList)));
        });
</script>

我还没有测试过,但它应该可以工作,或者它的一些变体,你可能需要将"CaptionList"作为某个父对象中的属性,并将其传递到Json.Encode.中

你也可以这样做:

<script type="text/javascript">
        $(document).ready(function () {
            var myArray = @Html.Raw(Json.Encode(CaptionList)));
        });
</script>

请注意,jQuery在这里不是必需的,它只是将其封装在就绪函数中的一种方式。