次のクラスのオブジェクトのリストがあります。
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;
}
}
Edit:何らかの理由でフィールドを公開したくない場合は、代わりに JsonPropertyAttribute =それらを直列化および非直列化できるようにするため:
[JsonProperty]
int catagoryId;
また、クラスごとに[JsonProperty]を指定しなくても、必要なすべてのメンバーをシリアル化するようにクラスを装飾できます。
[JsonObject(MemberSerialization.OptOut)]
public class Catagory {
...
}
MemberSerialization enumを使用すると、シリアル化するメンバーを指定できます。
この問題の別の原因-[DataContract]
属性を持つ基本クラスから派生したクラスをシリアル化しようとしましたが、派生クラスにはこの属性がありませんでした。 [DataContract]
を派生クラスに、[DataMember]
を派生クラスのすべてのパブリックプロパティに追加すると、すぐに機能し始めました。