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



我有以下类的对象列表:

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

我得到以下结果。

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

,{}]

请帮助我解决这个问题。

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

您还可以装饰类以序列化所需的所有成员,而无需为每个成员指定 [JsonProperty]。

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

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

  • MemberSerialization.OptOut:所有公共成员都已序列化。
  • MemberSerialization.OptIn:只有标有 JsonPropertyAttribute 或 DataMemberAttribute 的成员才会被序列化。
  • MemberSerialization.Fields:所有公共和私有成员都已序列化。

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

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

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

相关内容

  • 没有找到相关文章

最新更新