I am working on a project and I would like to send an entity from the database through a web service.
I have this as my data contract.
[DataContract]
public class CreateAlumniRequest
{
[DataMember]
public List<Alum.Data.EmploymentHistory> lstEmploymentHistory;
}
However, I keep getting this error.
Type
‘Alum.Data.Base.EmploymentHistoryBase’
cannot be serialized. Consider marking
it with the DataContractAttribute
attribute, and marking all of its
members you want serialized with the
DataMemberAttribute attribute. If the
type is a collection, consider marking
it with the
CollectionDataContractAttribute.
Which tells me I probably need to go to the EmploymentHistory class and mark it as a DataContract.
The problem is EmploymentHistory is generated by an inhouse ORM tool – I can’t really make any changes to it.
Is it possible to make serialize EmploymentHistory without adding that attribute in the class?
Is there any other solution? The only thing I can think of doing is re-creating EmploymentHistory in a serializable class and manually mapping the objects, which sounds like a lot of duplication.
I’m not sure which serializer you are trying to use but if Alum.Data.EmploymentHistory can’t be serialized because it isn’t marked as serializable or for some other reason… should be able to just right click on it and extract the interface. Using create a class to implement the interface using the refactoring menu and have just implement {get;set;} on the members. Then you could use automapper to map the data over.
It sound like alot but it actually would be really quick… and would avoid all the manual mapping. Even if you don’t use automapper for this it is definitely worth looking at. There are so many situations where you need to copy data from one object to another… the “AssertConfigurationIsValid” makes testing your mapping easy. If you arrays or lists or any kind of nested objects things are handled automagically … very cool… check it out.