我目前有一个公开SOAP enpoint的WCF服务。在这个网络服务中,我有以下方法:
public List<DataField> GetAvailableFields(string accountNumber, string accountKey, Models.Enums.CountryEnum country)
{
//Code that builds DataFields
return dataFields;
}
我的数据字段可能看起来像这样
[DataContract]
public class DataField
{
public DataField()
{
AlternativeFields = new List<DataField>();
}
[DataMember]
public string FieldName { get; set; }
[DataMember]
public string Value { get; set; }
[DataMember]
public bool IsRequired { get; set; }
[DataMember]
public List<DataField> AlternativeFields { get; set; }
public DataField ParentField { get; set; }
}
所以我有2个问题。
1:ParentField引用...我猜这需要,因为我不确定如何序列化
2:有我的替代字段列表是否合适?这本质上是DTO内部的DTO列表,但似乎这应该序列化很好,并且应该没有与此互操作性问题。一般而言......在其他DTO中使用DTO是不好的做法吗?
谢谢你,并随时指出我做错了什么。
答案 0 :(得分:2)
如果需要整个数据集,那么在DTO中使用DTO是完全合法的。否则,请考虑仅为您的域实体发送足够的信息(例如,引用实体的ID)。
FYI父字段应序列化正常(只要没有循环引用)。
答案 1 :(得分:0)
1)父字段上没有DataMember装饰器,因此它不会首先序列化。
假设它 上有装饰器,你仍然可以正常序列化(因为DataField是一个数据契约)。但是,你需要注意不要使用它进入循环并开始在无限时间内发送所有内容(这是获得异常的好方法)。
2)DTO清单没问题。但是,您需要确保不要发送重复数据。只需发送您需要的数据,然后在另一端处理它。
通常,我发送一个DTO列表,所有DTO都有唯一的ID,并且它们都有Int32的列表指向那些唯一的ID。但是,如果仅为此目的发送,那么这很好。