我在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在这里不是必需的,它只是将其封装在就绪函数中的一种方式。