C# 在输出之前隐藏一些对象字段?
是否可以在输出前隐藏某些字段 为了简单起见,假设我有C# 在输出之前隐藏一些对象字段?,c#,linq,entity-framework,dto,C#,Linq,Entity Framework,Dto,是否可以在输出前隐藏某些字段 为了简单起见,假设我有User和Image一个用户可以有多个图像 使用者 现在我想输出用户,有图像,没有图像。有可能这样做吗? \u db.Users.SingleOrDefault(x=>x.Id==Id)。除了(x=>x.Images) 这可以通过添加[JsonIgnore]来实现,但这不是一个选项,因为我希望以不同的请求输出图像 这可以通过输出匿名对象实现,但这不是一个选项 这可以通过创建DTO来实现,但即便如此,如何将属性从模型自动分配给DTO呢?假设我
User
和Image
一个用户可以有多个图像
使用者
现在我想输出用户
,有图像,没有图像。有可能这样做吗?
\u db.Users.SingleOrDefault(x=>x.Id==Id)。除了(x=>x.Images)代码>
- 这可以通过添加
[JsonIgnore]
来实现,但这不是一个选项,因为我希望以不同的请求输出图像
- 这可以通过输出匿名对象实现,但这不是一个选项
- 这可以通过创建DTO来实现,但即便如此,如何将属性从模型自动分配给DTO呢?假设我有30个字段,我不想手动分配它们
假设我有30个字段,我不想手动分配它们
救命啊
PM>安装软件包自动映射器
DTO:
公共类用户
{
公共int Id{get;set;}
公共字符串名称{get;set;}
公共IEnumerable映像{get;set;}
}
公共类用户信息
{
公共int Id{get;set;}
公共字符串名称{get;set;}
}
代码:
Mapper.CreateMap();
var user=新用户{Id=1,Name=“Bob”};
var userInfo=Mapper.Map(用户);
返回Json(新的{userInfo});
我认为这也是一个值得您注意的解决方案:您可以定义一些基类
或接口
,其中包含您想要的元素,如下所示:
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; }
}
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.
你应该看看。@Romoku从一眼看,这就是我需要的。非常感谢,我将进一步调查。我认为他想要的是,根据数据库设置选择要显示的属性。这不够动态,图像中包含8个变量的更复杂系统,这些变量可能显示在结果中,也可能不显示在结果中。这只是一个示例。汽车制造商有。
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 });
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; }
}
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.