16

我正在使用 jQueryUI 的自动完成功能来搜索用户。该文档指出,我可以使用数组作为以下格式的数据源:[ { 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" }, ... ]

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

编辑:根据评论的输入,我已经验证这两种格式在功能上确实是等效的。label我做了更多的测试,结果证明value是区分大小写的。将我的成员更改为小写似乎可以解决问题,但我认为解决方案不是最好的。有关如何将 : 左侧的字符串(这叫什么?)更改为小写的任何建议?

4

6 回答 6

7
        //View.cshtml
<script type="text/javascript">
    var arrayOfArrays = JSON.parse('@Html.Raw(Json.Encode(Model.GetUsers()))');
</script>
于 2018-05-02T08:01:17.697 回答
2

一个简单的 Employee 对象:

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

将它们的一些实例添加到列表中:

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"}]

下面的链接也有类似的例子

在 MVC 4 中将对象转换为 JSON

于 2013-09-23T18:42:34.010 回答
1

Jason P 和 Rob G 的评论是正确的。问题中的两种格式是等价的。原来我的问题出在外壳上。哦!

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

于 2013-09-26T16:01:53.423 回答
1

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

@Html.Raw(Json.Encode(Model.ListPropertyName))
于 2019-03-12T14:15:32.633 回答
0

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

另请参阅:MVC 4 中的正确 JSON 序列化http://www.matskarlsson.se/blog/serialize-net-objects-as-camelcase-json

于 2013-09-23T19:12:54.160 回答
0

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

而不是在您看来这样做:

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

做这个:

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

注意:

  1. 将键转换为camelCase是默认行为。
  2. 结果类型是IHtmlContent,不需要包裹在里面@Html.Raw()
于 2020-06-16T00:51:35.427 回答