Newtonsoft.Json serialization returns empty json object

后端 未结 4 1400
轻奢々
轻奢々 2020-12-25 10:09

I have list of objects of following class:

public class Catagory
{
    int catagoryId;
    string catagoryNameHindi;
    string catagoryNameEnglish;
    List         


        
相关标签:
4条回答
  • 2020-12-25 10:22

    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.

    0 讨论(0)
  • 2020-12-25 10:29

    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;
    
    0 讨论(0)
  • 2020-12-25 10:33

    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:

    • MemberSerialization.OptOut: All public members are serialized.
    • MemberSerialization.OptIn: Only members marked with JsonPropertyAttribute or DataMemberAttribute are serialized.
    • MemberSerialization.Fields: All public and private members are serialized.
    0 讨论(0)
  • 2020-12-25 10:41

    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.

    0 讨论(0)
提交回复
热议问题