Cha*_*tra 4 c# linq asp.net json asp.net-mvc-4
我有两个不同的列表来自同一个对象.我希望将这两个作为单独的列表同时获取,或者在返回JSON对象时加入这两个相同的列表.
这是我的代码.
List<User> userEntity = users.Where(s => s.Id == Id).ToList();
var GetUserNames = userEntity.SelectMany(s => s.Names.Select(u =>
new
{
Name = u.Name,
Id = u.Id
})).ToList();
var GetProfile = userEntity.SelectMany(s => s.Profile.Select(u =>
new
{
Name = u.Name,
Id = u.Id
})).ToList();
return Json(GetUserNames, JsonRequestBehavior.AllowGet);
Run Code Online (Sandbox Code Playgroud)
我更喜欢这样做:返回的项目是不同的类型.而不是返回带有类型鉴别器的裸JSON列表,而是返回一个多属性JSON对象:
return Json(new
{
Names = GetUserNames,
Profiles = GetProfile
}, JsonRequestBehavior.AllowGet);
Run Code Online (Sandbox Code Playgroud)
您返回的JSON将以{Name, Id}草图形式将对象分为其类型:
{
Names: [
{Name:"UserName", Id:"3"},
{Name:"OtherUser", Id: "4"}
],
Profiles: [
{Name:"Normal", Id:"1"},
{Name:"Admin", Id: "99"}
]
}
Run Code Online (Sandbox Code Playgroud)
在大多数JSON.Net客户端解析方案中(即从WPF智能客户端使用WebAPI),您自动映射(例如来自RestSharp)将允许您将其反序列化为表单的类
public class NameId
{
public int Id {get; set;}
public string Name {get; set;}
}
public class UserNamesResponse
{
public List<NameId> Names {get; set;}
public List<NameId> Profiles {get; set;}
}
Run Code Online (Sandbox Code Playgroud)
这可能比交错列表更方便,更清晰,无论如何必须将其过滤到单独的列表中....(或者在UI绑定层中以性能损失通过过滤类型转换器...)
| 归档时间: |
|
| 查看次数: |
10694 次 |
| 最近记录: |