Justin Justin - 1 month ago 17
C# Question

Datacontract exception. Cannot be serialized

I have the following 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?

Answer

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).]

Comments