在输出之前是否可以隐藏某些字段?
为了简单起见,我们说User
和Image
一个用户可以有多个图片。
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public IEnumerable<Image> Images { get; set; }
}
{
Id: "1",
Name: "Steve"
}
现在我想用图像输出User
而没有。可以这样做吗?
_db.Users.SingleOrDefault(x => x.Id == id).Except(x => x.Images);
[JsonIgnore]
来实现,但它不是一个选项,因为我想在某个不同的请求中输出Images
。答案 0 :(得分:0)
想象一下,我有30个字段,我不想手动分配它们。
Automapper救援!
PM&GT;安装包AutoMapper
DTO:
public class User
{
public int Id { get; set; }
public string Name { get; set; }
public IEnumerable<Image> Images { get; set; }
}
public class UserInfo
{
public int Id { get; set; }
public string Name { get; set; }
}
代码:
Mapper.CreateMap<User, UserInfo>();
var user = new User { Id = 1, Name = "Bob" };
var userInfo = Mapper.Map<User, UserInfo>(user);
return Json(new { userInfo });
答案 1 :(得分:0)
我认为这也是值得您关注的解决方案:您可以定义一些包含您想要的元素的base class
或interface
,如下所示:
public class UserBase {
public int Id {get;set}
public string Name {get;set;}
}
public class User : UserBase {
public IEnumerable<Image> Images { get; set; }
}
//or using interface, I think this is better
public class IUserBase {
int Id {get;set}
string Name {get;set;}
}
public class User : IUserBase {
public int Id { get; set; }
public string Name { get; set; }
public IEnumerable<Image> Images { get; set; }
}
然后在LINQ
查询中,您可以执行以下操作:
var result = users.Select(x=>(IUserBase)x);
foreach(var user in result)
System.Diagnostics.Debug.Print(user.Id + " : " + user.Name);//There is no `Images` element here except using explicitly cast to User type.