WCF(SOAP)服务实现:返回具有相同ContaminationID的两个人员列表
WCF接口调整方案
1. 新增自定义返回结果数据契约
你需要新增一个数据契约类,用来封装两个列表的返回结果,WCF才能正确序列化返回两个集合:
[DataContract] public class ContaminationPersonResult { [DataMember] public List<Infected> MatchedInfecteds { get; set; } [DataMember] public List<Isolated> MatchedIsolateds { get; set; } }
2. 修复Isolated类的序列化注解
你当前的Isolated类没有添加[DataContract]注解,WCF无法正确序列化该类的实例,需要补上:
[DataContract] // 新增该注解 public class Isolated : Infected { [DataMember] public bool Internado { get; set; } [DataMember] public string LocalInternamento { get; set; } [DataMember] public string DataInternamento { get; set; } }
3. 修改服务契约接口
修改IInfecteds.cs中GetAllContaminationID方法的返回值类型为你新增的返回类:
[ServiceContract] public interface IInfecteds { [OperationContract] List<Infected> GetNome(string nomefiltro =""); // 修改返回值为自定义的结果类 [OperationContract] ContaminationPersonResult GetAllContaminationID(int contaminationID); }
4. 修改服务实现逻辑
重写Infecteds.svc.cs中的GetAllContaminationID方法,分别过滤两个列表后返回:
public ContaminationPersonResult GetAllContaminationID(int contaminationID) { return new ContaminationPersonResult { // 过滤确诊人员列表 MatchedInfecteds = infecteds.Where(p => p.ContaminationID == contaminationID).ToList(), // 过滤隔离人员列表 MatchedIsolateds = isolateds.Where(p => p.ContaminationID == contaminationID).ToList() }; }
额外注意事项
- 你当前
Infected类中的Datanasc属性定义为int类型,初始化时写的2000-23-12是算术表达式,运行时会计算为1965,不符合日期存储需求,建议将该属性类型改为DateTime。 - 初始化列表赋值时,日期格式需要符合你定义的属性类型要求,避免运行时报错。
内容的提问来源于stack exchange,提问作者Diogo R
相关产品推荐
相关产品推荐

