C#Razor List到JSON:通过键获取值

时间:2018-08-22 18:11:34

标签: c# json razor

我正在从Razor页面上的数据库中提取数据并将其放在列表中。目的是让用户键入一年,然后弹出汽车品牌。

C#

List<string[]> ListOfAutoMakes = new List<string[]>();
foreach (var item in SQDB.Query("SELECT year, make FROM cars"))
{
    string[] AutoMakes = new string[2];
    AutoMakes [0] = item.id.Trim();
    AutoMakes [1] = item.make.Trim();
    ListOfAutoMakes.Add(AutoMakes);
}

cshtml文件中的Javascript:

var AutoMakeList = '@Html.Raw(Newtonsoft.Json.JsonConvert.SerializeObject(ListOfAutoMakes.ToArray()))';
alert(AutoMakeList.1983 + ' ' + AutoMakeList['1991'])

渲染的Javascript显示我的数据如下:

var AutoMakeList = '[["1983","VOLVO"],["1991","FIAT"],["1982","VOLVO"]]'

输出为Undefined或空字符串。

很显然,我没有键/值对。我确定问题在于如何构建C#列表,但是我不确定应该如何创建它。我是C#的新手,但是我相信当我真的需要构建字典时,我正在构建一个数组数组。我花了一整天的时间创建一个C#字典,将其序列化为JSON,然后通过Key访问生成的JSON。我找到的所有示例都是针对较旧/其他版本的C#,或者不够完整,无法连接所有点。

1 个答案:

答案 0 :(得分:0)

您当前的JSON数据是一个数组而不是对象,所以我认为您不能使用键/值来做到这一点。

如果要在Javascript中使用JSON键/值。

您可以尝试创建AutoMakes类而不是string[2]来承载数据。

public class AutoMakes
{

    public string id { get; set; }
    public string make { get; set; }
}

然后您可以像在控制器中的SerializeObject那样使用带字符串的JSON。

List<AutoMakes> ListOfAutoMakes = new List<AutoMakes>();
foreach (var item in SQDB.Query("SELECT year, make FROM cars"))
{
    ListOfAutoMakes.Add(new AutoMakes()
    {
        id = item.id.Trim(),
        make = item.make.Trim()
    });
}
ViewBag.ListOfAutoMakes = Newtonsoft.Json.JsonConvert.SerializeObject(ListOfAutoMakes);

然后您可以显示数组第一个对象键= {id的值。

var AutoMakeList = @Html.Raw(ViewBag.ListOfAutoMakes);
alert(AutoMakeList[0].id);  

Here is a sample

注意

我会使用ajax而不是razor来调用JSON数据,因为这样会更灵活。