如何序列化生成的类?

时间:2011-03-03 03:33:03

标签: .net wcf serialization orm code-generation

我正在开发一个项目,我想通过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并手动映射对象,这听起来像是很多重复。

2 个答案:

答案 0 :(得分:1)

我不确定您尝试使用哪个序列化程序,但如果Alum.Data.EmploymentHistory无法序列化,因为它未标记为可序列化或由于某些其他原因...应该能够右键单击在它上面并提取界面。使用重构菜单创建一个类来实现接口,并在成员上实现{get; set;}。然后,您可以使用automapper来映射数据。

这听起来很多但实际上它会很快......并且会避免所有的手动映射。即使您不使用automapper,也绝对值得一看。在很多情况下,您需要将数据从一个对象复制到另一个对象......“AssertConfigurationIsValid”可以轻松测试您的映射。如果您对数组或列表或任何类型的嵌套对象进行自动处理......非常酷......请查看它。

答案 1 :(得分:0)

如果您的代码生成器创建了部分类,您可以将缺少的属性添加到新的部分文件中。

如果不是,您可以尝试使用其他开源序列化工具,例如SharpSerializerprotobuf-net