Datacontract exception. Cannot be serialized

.net, c#, wcf

Solution

Because you have provided one or more initializing constructors, you will also need to add a parameterless (default) constructor.

i.e. You need to add:

[DataContract]
public class Occupant
{
    // *** Needed only for Serialization
    public Occupant() {}
    ...

This is because the default constructor disappears when you add an explicit constructor.

[The issue isn't with the method returning `List<Occupant>`, since methods aren't serialized).]

Problem

I have the following WCF DataContract: ``` [DataContract] public class Occupant { private string _Name; private string _Email; private string _Organization; private string _Badge; public Occupant(string name, string badge, string organization) { Name = name; Badge = badge; Organization = organization; } public Occupant(string name, string badge) { Value = name; Key = badge; } [DataMember] public string Key { get { return _Name; } set { _Name = value; } } [DataMember] public string Value { get { return _Badge; } set { _Badge = value; } } [DataMember] public string Name { get { return _Name; } set { _Name = value; } } [DataMember] public string Email { get { return _Email; } set { _Email = value; } } [DataMember] public string Organization { get { return _Organization; } set { _Organization = value; } } [DataMember] public string Badge { get { return _Badge; } set { _Badge = value; } } } ``` When I try to access this service via web browser (it is hosted on IIS), I am getting this error: System.Runtime.Serialization.InvalidDataContractException: Type 'MyNamespace.Occupant' 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. One of my methods is returning a `List` of type `Occupant`. Would this be causing it?

Original source

Related problems