将C#对象列表转换为JavaScript对象数组

时间:2013-09-23 18:35:10

标签: c# jquery asp.net-mvc jquery-ui

我正在使用jQueryUI的autocomplete来搜索用户。该文档说明我能够以下列格式使用数组作为数据源:[ { label: "Choice1", value: "value1" }, ... ]

我有一个基类,它提供了一个由我的视图模型继承的唯一Users列表。视图模型具有以下功能:

public List<TestJson> GetUsers()
{
    return AvailableUsers
        .Select(u => new TestJson
            {
                Label = u.LastName + ", " + u.FirstName + "(" + u.UserId + ")",
                Value = u.UserId
            }).ToList();
}

public class TestJson
{
    public string Label { set; get; }
    public string Value { get; set; }
}

在我看来,我使用上面的内容:

var userNameList = @Html.Raw(Json.Encode(Model.GetUsers()));

$("#UserName").autocomplete({
    source:userNameList 
});

结果userNameList显示如下:

[ { "Label": "Choice1", "Value": "value1" }, ... ]

而不是:

[ { label: "Choice1", value: "value1" }, ... ]

如何让我的数组以正确的格式显示?

编辑:根据评论的输入,我已经确认这两种格式在功能上确实相同。我做了一些测试,结果发现labelvalue区分大小写。将我的成员改为小写似乎可以解决问题,但我觉得解决方案并不是最好的。关于如何将以下字符串左侧的字符串更改为小写的任何建议?(

6 个答案:

答案 0 :(得分:3)

        //View.cshtml
<script type="text/javascript">
    var arrayOfArrays = JSON.parse('@Html.Raw(Json.Encode(Model.GetUsers()))');
</script>

答案 1 :(得分:2)

一个简单的Employee对象:

public class Employee
{
public string Name { get; set; }
public string Age { get; set; }
public string ID { get; set; }   
}

将一些实例添加到List:

Employee oEmployee1 = 
new Employee{Name="Pini",ID="111", Age="30"};

Employee oEmployee2 = 
new Employee { Name = "Yaniv", ID = "Cohen", Age = "31" };
Employee oEmployee3 = 
new Employee { Name = "Yoni", ID = "Biton", Age = "20" };

List<Employee> oList = new List<Employee>() 
{ oEmployee1, oEmployee2, oEmployee3 };

然后序列化:

System.Web.Script.Serialization.JavaScriptSerializer oSerializer = 
new System.Web.Script.Serialization.JavaScriptSerializer();
string sJSON = oSerializer.Serialize(oList);

这是输出:

[{"Name":"Pini","Age":"30","ID":"111"},
{"Name":"Yaniv","Age":"31","ID":"Cohen"},
{"Name":"Yoni","Age":"20","ID":"Biton"}]

以下链接也有类似的例子

Convert Object to JSON in MVC 4

答案 2 :(得分:1)

Jason P和Rob G的评论是正确的。问题中的两种格式是等价的。事实证明我的问题是外壳。 DOH!

我刚刚将班级中的属性更改为小写。想了想,我很想看到另一种解决方案。我会选择这个,直到提交更好的一个。

答案 3 :(得分:0)

我假设您正在使用MVC。 WebAPI将默认为camelCase,而MVC默认为PascalCase。

另请参阅:Proper JSON serialization in MVC 4http://www.matskarlsson.se/blog/serialize-net-objects-as-camelcase-json

答案 4 :(得分:0)

如果您通过MVC模型传递对象列表,并希望将其数组变量存储在.cshtml页PFB代码段的脚本节中:-

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

答案 5 :(得分:0)

从.NET Core 3.0开始,它更简单。

不是您认为的那样:

var userNameList = @Json.Serialize(Model.GetUsers());

执行此操作:

IHtmlContent

请注意:

  1. 将键转换为 camelCase 是默认行为。
  2. 结果类型为@Html.Raw(),不需要包装在{{1}}内。