首页 > 解决方案 > 使用 c# 将嵌套模型对象复制到 DTO 对象

问题描述

我想将数据对象复制到嵌套相同类型的数据传输对象。

C#

public class Data
{
    public int Id { get; set; }
    public string SomeInfo { get; set; }
    public virtual ICollection<Data> Data { get; set; }
}

public class DTOData
{
    public int Id { get; set; }
    public string SomeInfo { get; set; }
    public virtual ICollection<DTOData> Data { get; set; }
}

List<Data> data = new List<Data>();
data.Add(new Data(){Id =1, SomeInfo  = 'sometext' });

List<DTOData> dtoData = new List<DTOData>();
dtoData.Add(new DTOData(){Id =10, SomeInfo  = 'sometext2' });

我想将数据对象复制到 DTOData(数据传输对象)。

我的方法

dtoData = (DTOData) data;

但它抛出类型不匹配的异常。如何将数据对象复制到 DTOData 对象,主要的复杂性在于它具有嵌套的自引用。请帮忙。

标签: c#asp.netasp.net-mvcentity-framework

解决方案


如果您不关心性能,这可能是一个解决方案,使用 json 和 newtonsoft 将其序列化和反序列化为新类型,例如:

dtoData  = JsonConvert.DeserializeObject<DTOData>(JsonConvert.SerializeObject(data));

对于列表对象:

dtoData  = JsonConvert.DeserializeObject<List<DTOData>>(JsonConvert.SerializeObject(data));

推荐阅读