首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Newtonsoft.Json序列化返回空json对象

Newtonsoft.Json序列化返回空json对象
EN

Stack Overflow用户
提问于 2015-03-12 14:29:36
回答 4查看 41.5K关注 0票数 55

我有以下类的对象列表:

public class Catagory
{
    int catagoryId;
    string catagoryNameHindi;
    string catagoryNameEnglish;
    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;
    }
}

  public class SubCatagory
{
    int subCatagoryId { get; set; }
    string subCatNameHindi { get; set; }
    string subCatNameEng { get; set; }

    public SubCatagory(int Id, string NameHindi, string NameEng)
    {
        this.subCatagoryId = Id;
        this.subCatNameEng = NameEng;
        this.subCatNameHindi = NameHindi;
    }
}

当我使用Newtonsoft.Json将这个列表转换成json字符串时,它返回空对象数组。

  string json=JsonConvert.SerializeObject(list);

我得到了以下结果。

{},{}

关于这个问题,请帮我一下。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2015-03-12 15:18:16

默认情况下,NewtonSoft.Json只序列化公共成员,因此将字段设置为公共:

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;
    }
}

编辑:如果由于某些原因你真的不想让你的字段成为公共的,你可以用JsonPropertyAttribute来修饰它们,以允许它们被序列化和反序列化:

[JsonProperty]
int catagoryId;
票数 123
EN

Stack Overflow用户

发布于 2017-02-21 22:24:33

您还可以装饰您的类来序列化所有您想要的成员,而不必为每个成员指定JsonProperty。

[JsonObject(MemberSerialization.OptOut)]
public class Catagory {
    ...
}

MemberSerialization枚举允许您指定要序列化的成员:

  • MemberSerialization.OptOut:所有公共成员都是serialized.
  • MemberSerialization.OptIn:仅标记为serialized.
  • MemberSerialization.Fields:的成员JsonPropertyAttribute或DataMemberAttribute是序列化的所有公共成员和私有成员。
票数 17
EN

Stack Overflow用户

发布于 2019-02-02 06:25:28

这个问题的另一个原因--我试图序列化的类派生自具有[DataContract]属性的基类,但是派生类缺少这个属性。一旦我将[DataContract]添加到派生类中,并将[DataMember]添加到派生类的所有公共属性中,它立即开始工作。

票数 11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29003215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档