I have list of objects of following class:
public class Catagory
{
int catagoryId;
string catagoryNameHindi;
string catagoryNameEnglish;
List
Another cause of this problem--the class I was attempting to serialize derived from a base class that had the [DataContract]
attribute, but the derived class lacked this attribute. Once I added [DataContract]
to the derived class and [DataMember]
to all of the public properties of the derived class it began working immediately.
By default, NewtonSoft.Json will only serialize public members, so make your fields public:
public class Catagory
{
public int catagoryId;
public string catagoryNameHindi;
public string catagoryNameEnglish;
public List<Object> subCatagories;
public Catagory(int Id, string NameHindi, string NameEng, List<Object> l)
{
this.catagoryId = Id;
this.catagoryNameHindi = NameHindi;
this.catagoryNameEnglish = NameEng;
this.subCatagories = l;
}
}
Edit: If for some reason you really don't want to make your fields public, you can instead decorate them with the JsonPropertyAttribute to allow them to be serialized and deserialized:
[JsonProperty]
int catagoryId;
You could also decorate your class to serialize all members you want without having to specify [JsonProperty] for each of them.
[JsonObject(MemberSerialization.OptOut)]
public class Catagory {
...
}
The MemberSerialization enum allows you to specify what members you want to serialize:
A different problem in my case,
It appears if you mark a class as [DataContract]
then the properties to be serialized need to be marked [DataMember]
and also should be Public.
In my case, I was migrating from WCF to web API , so didnt require any of DataContract or DataMember, so I removed all and it got serialised fine.