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.