[asp.net]从一个控制器操作如何应该返回两个对象的列表?

发布时间: 2017/3/26 5:37:49
注意事项: 本文中文内容可能为机器翻译,如要查看英文原文请点击上面连接.

我有两个不同的列表来自同一个对象。我想要得到那些两个同时作为单独的列表或加入那些两个相同的列表,当返回的 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);

解决方法 1:

我宁愿做这不同︰ 返回的项是不同的类型。而不是返回类型鉴频器裸 JSON 列表,返回一个 multiproperty JSON 对象︰

return Json(new 
{ 
    Names = GetUserNames, 
    Profiles = GetProfile 
}, JsonRequestBehavior.AllowGet);

你返回的 JSON 将有 {Name, Id} 对象划分为他们的类型,在素描形式︰

{ 
  Names: [
   {Name:"UserName", Id:"3"}, 
   {Name:"OtherUser", Id: "4"}
  ],
  Profiles: [
   {Name:"Normal", Id:"1"}, 
   {Name:"Admin", Id: "99"}
  ]
}

在大多数 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;}
}

这可能是更方便和更明确地工作比交错的列表,必须过滤到单独列出约束力的反正...(或美联储通过筛选类型转换器在性能在 UI 绑定层...)

官方微信
官方QQ群
31647020