我正在开发一个项目,我想通过Web服务从数据库发送一个实体。
我将此作为我的数据合同。
[DataContract]
public class CreateAlumniRequest
{
[DataMember]
public List<Alum.Data.EmploymentHistory> lstEmploymentHistory;
}
但是,我一直收到这个错误。
类型 'Alum.Data.Base.EmploymentHistoryBase' 无法序列化。考虑标记 它与DataContractAttribute 属性,并标记其所有 你想用序列化的成员 DataMemberAttribute属性。如果 type是一个集合,考虑标记 它与 CollectionDataContractAttribute。
这告诉我,我可能需要转到EmploymentHistory类并将其标记为DataContract。
问题是EmploymentHistory是由内部ORM工具生成的 - 我无法对其进行任何更改。
是否可以在不在类中添加该属性的情况下序列化EmploymentHistory?
还有其他解决方案吗?我唯一能想到的就是在一个可序列化的类中重新创建EmploymentHistory并手动映射对象,这听起来像是很多重复。
答案 0 :(得分:1)
我不确定您尝试使用哪个序列化程序,但如果Alum.Data.EmploymentHistory无法序列化,因为它未标记为可序列化或由于某些其他原因...应该能够右键单击在它上面并提取界面。使用重构菜单创建一个类来实现接口,并在成员上实现{get; set;}。然后,您可以使用automapper来映射数据。
这听起来很多但实际上它会很快......并且会避免所有的手动映射。即使您不使用automapper,也绝对值得一看。在很多情况下,您需要将数据从一个对象复制到另一个对象......“AssertConfigurationIsValid”可以轻松测试您的映射。如果您对数组或列表或任何类型的嵌套对象进行自动处理......非常酷......请查看它。
答案 1 :(得分:0)