C# 创建DTO时,有点困惑

C# 创建DTO时,有点困惑,c#,dto,C#,Dto,刚刚注册。第一个问题:) 如果在我的域模型实体国家/地区中有Name属性和List of State属性。此外,州有名称,州财产清单,州有市,最末端是城市实体 为了更好地说明:我正在尝试将CountryEntity与CountryDTO系列化,我的构造函数如下所示: public CountryDTO(Country x) { Name = x.Name; StateList = new List<StateDTO>();

刚刚注册。第一个问题:) 如果在我的域模型实体国家/地区中有Name属性和List of State属性。此外,州有名称,州财产清单,州有市,最末端是城市实体

为了更好地说明:我正在尝试将CountryEntity与CountryDTO系列化,我的构造函数如下所示:

    public CountryDTO(Country x)
    {
        Name = x.Name;
        StateList = new List<StateDTO>();
        foreach (State state in x.States)
        {
            StateDTO stateDto = new StateDTO(state);
            StateList.Add(stateDto);
        }        
    }
public CountryDTO(国家x)
{
Name=x.Name;
StateList=新列表();
foreach(x.States中的状态)
{
StateDTO StateDTO=新StateDTO(state);
StateList.Add(stateDto);
}        
}
但当我深入了解StateDTO时,它看起来是这样的>

    public StateDTO(State x)
    {
        Name = x.Name;
        CountryDTO Country = new CountryDTO(x.Country);

        CantonList = new List<CantonDTO>();
        foreach (Canton c in x.Cantons)
        {
            CantonDTO cantonDto = new CantonDTO(c);               
            CantonList.Add(cantonDto);
        }
    }
public StateDTO(州x)
{
Name=x.Name;
CountryDTO Country=新CountryDTO(x.Country);
CantonList=新列表();
foreach(x州的c州)
{
CantonTo CantonTo=新CantonTo(c);
CantonList.Add(CantonTo);
}
}
因为我的州应该知道他的国家的父对象,所以我有这条线 CountryDTO Country=新CountryDTO(x.Country);这就是问题所在,(可能是递归引用),这将发生在以State对象为父对象的州,等等。 因此,如何加载此父实体并避免此错误。 我需要引用父对象,如Country.Name no CountryName作为字符串


希望,我很清楚:)

您可以将:
公共无效状态更改为(状态x)
公共无效状态更改为
公共无效状态更改为(状态x,国家/地区更改为家长)
,然后使用
状态更改为StateDTO StateDTO=newstatedto(状态,this)


this
操作符反向到
CountryDTO
实例,您可以将其传递给孩子们。

我认为您的问题是试图在dto中反映您拥有的域模型。您最好考虑一下您在客户端真正需要什么,并使dto反映出这一点,而不是重复您在域中拥有的内容。这一点尤其正确,因为每次为服务调用提供服务时,您都在序列化一个国家/地区中所有内容的整个层次结构。在几乎所有的情况下,寄回去似乎太多了。这里有一篇很好的帖子可以更好地描述这一点: