8wDlpd.png
8wDFp9.png
8wDEOx.png
8wDMfH.png
8wDKte.png

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

jdgleeson 1月前

65 0

我有以下类的对象列表:public class Catagory{ int catagoryId; string catagoryNameHindi; string catagoryNameEnglish; List子类别;公共

我有以下类别的对象列表:

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

我得到以下结果。

[{},{},{},{},{}]

请帮助我解决这个问题。

帖子版权声明 1、本帖标题:Newtonsoft.Json 序列化返回空的 json 对象
    本站网址:http://xjnalaquan.com/
2、本网站的资源部分来源于网络,如有侵权,请联系站长进行删除处理。
3、会员发帖仅代表会员个人观点,并不代表本站赞同其观点和对其真实性负责。
4、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
5、站长邮箱:yeweds@126.com 除非注明,本帖由jdgleeson在本站《list》版块原创发布, 转载请注明出处!
最新回复 (0)
  • 我在使用 Jackson 库时遇到了同样的问题。将字段设为公开也解决了这个问题。

  • 默认情况下,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;
    

    此属性还允许指定其他选项,例如指定序列化/反序列化时使用的属性名称:

    [JsonProperty("categoryId")]
    int Category;
    
  • @IgnacioChiazzo 是的,您应该能够使用 JsonPropertyAttribute 来指示应该序列化非公共字段或属性:[JsonProperty]private int categoryId;

  • @JLRishe - 你应该添加你的评论作为答案,因为这是我现在的做法,而不是公开所有内容

  • 我绞尽脑汁想了一个小时,想知道为什么这对一个班级不起作用,但对另一个班级却起作用;忽略了我没有将我的属性声明为公共的!

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

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

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

    • MemberSerialization.OptOut :所有公共成员都被序列化。
    • MemberSerialization.OptIn :只有标有 JsonPropertyAttribute 或 DataMemberAttribute 的成员才会被序列化。
    • MemberSerialization.Fields :所有公共和私有成员都被序列化。
  • 这个解决方案拯救了我。我以前从来没有这样做过,也不知道为什么现在突然需要这样做……但我不会忘记。

  • 导致此问题的另一个原因是我尝试序列化的类派生自具有该 [DataContract] 属性的基类,但派生类缺少此属性。一旦我将其添加 [DataContract] 到派生类以及 [DataMember] 派生类的所有公共属性中,它就会立即开始工作。

  • 类似的事情似乎发生在我身上,除了内部类(外部有 [DataContract],但内部没有)。相同的解决方案解决了它。

  • 在我的情况下出现了一个不同的问题,如果你将一个类标记为,那么 [DataContract] 需要序列化的属性就需要被标记 [DataMember] ,并且也应该是公共的。

    就我而言,我正在从 WCF 迁移到 Web API,因此不需要任何 DataContract 或 DataMember,因此我删除了所有内容并且它得到了良好的序列化。

返回
作者最近主题:
本站部分资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站站长删除 侵权/投诉/邮箱: yeweds@126.com
Processed: 5.980, SQL: 38