如何从列表/数组中删除对象属性?

时间:2019-11-14 13:19:03

标签: c# api model-view-controller

如何从对象的列表/数组中删除属性?

我的模型包含:

 public string FirstName { get; set; }
 public string LastName { get; set; }
 public string Age { get; set; }
 public string Size { get; set; }

并且我正在将其转换为JSON

string json = JsonConvert.SerializeObject(client);

一切正常...我在JSON中获得了对象的所有属性。

但是我需要创建两个级别的访问权限,并在一个级别中显示所有信息,而在另一个级别中,则显示较少的属性...

我的问题是:我可以删除对象的属性吗?

类似这样:

List<Customer> customers = new List<Customer>();
//(and this have 100 clients inner)

customer.removeProperty(Age, Size); // Can I have someting like this?

3 个答案:

答案 0 :(得分:3)

尝试使用属性上方的json ignore标签。例如:

[JsonIgnore]
public string Age { get; set; }

如果您希望能够在不更改某些属性的情况下进行序列化而又不更改实际类的结构,则可以尝试使用示例here

答案 1 :(得分:0)

使用较少的属性创建一个新模型。制作两个列表,一个带有所有属性,另一个带有要删除的属性。

例如

public YourModelNow
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public string Age { get; set; }
    public string Size { get; set; }
}

public YourModelNowFiltered
{
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

这是假设您需要两个具有不同属性的file.json。如果您只需要忽略属性,则使用Ross Gurburts方法。

答案 2 :(得分:0)

我建议使用AutoMapper

您将需要创建DTO [数据传输对象]类 具有您要公开的属性

用法很简单:

在配置中:

var config = new MapperConfiguration(cfg => {
            cfg.CreateMap<YourModel, YourModelDTO>();
        });

实际使用情况:

IMapper iMapper = config.CreateMapper();
var source = new YourModel();
var destination = iMapper.Map<YourModel, YourModelDTO>(source);

有关更多信息和 AutoMapper 可以读取here

的示例