VIV*_*VEK 44 asp.net json json.net
我有以下类的对象列表:
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;
}
}
Run Code Online (Sandbox Code Playgroud)
当我通过使用Newtonsoft.Json将此列表转换为json字符串时,它返回空对象的数组.
string json=JsonConvert.SerializeObject(list);
Run Code Online (Sandbox Code Playgroud)
我得到了以下结果.
[{},{},{},{},{}]
请帮我解决这个问题.
JLR*_*she 93
默认情况下,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;
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:如果由于某种原因你真的不想让你的字段公开,你可以用JsonPropertyAttribute来装饰它们,以允许它们被序列化和反序列化:
[JsonProperty]
int catagoryId;
Run Code Online (Sandbox Code Playgroud)
joa*_*ego 11
您还可以修饰您的类以序列化您想要的所有成员,而无需为每个成员指定[JsonProperty].
[JsonObject(MemberSerialization.OptOut)]
public class Catagory {
...
}
Run Code Online (Sandbox Code Playgroud)
该MemberSerialization枚举允许你指定要序列什么成员:
在我的情况下,一个不同的问题是,如果您将类标记为,[DataContract]则需要标记要序列化的属性[DataMember]并且也应该是公共的。
就我而言,我正在从 WCF 迁移到 Web API,因此不需要任何 DataContract 或 DataMember,所以我删除了所有内容并且序列化得很好。
造成此问题的另一个原因-我尝试序列化的类是从具有该[DataContract]属性的基类派生的,但是派生类缺少此属性。一旦添加[DataContract]到派生类和派生类的[DataMember]所有公共属性,它便立即开始工作。