J'ai une liste d'objets de classe suivante:
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;
}
}
lorsque je convertis cette liste en chaîne json à l'aide de Newtonsoft.Json, elle retourne un tableau d'objets vides.
string json=JsonConvert.SerializeObject(list);
Je reçois le résultat suivant.
[{}, {}, {}, {}, {}]
S'il vous plaît aidez-moi en ce qui concerne ce problème.
Par défaut, NewtonSoft.Json ne sérialisera que les membres publics. Rendez donc vos champs publics:
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: Si pour une raison quelconque vous ne voulez vraiment pas rendre vos champs publics, vous pouvez les décorer avec le JsonPropertyAttribute pour leur permettre d'être sérialisés et désérialisés:
[JsonProperty]
int catagoryId;
Vous pouvez également décorer votre classe pour sérialiser tous les membres de votre choix sans avoir à spécifier [JsonProperty] pour chacun d'eux.
[JsonObject(MemberSerialization.OptOut)]
public class Catagory {
...
}
Le MemberSerialization enum vous permet de spécifier les membres que vous souhaitez sérialiser:
Une autre cause de ce problème - la classe que j'essayais de sérialiser dérive d'une classe de base ayant l'attribut [DataContract], mais cet attribut manquait à la classe dérivée. Une fois que j'ai ajouté [DataContract] à la classe dérivée et [DataMember] à toutes les propriétés publiques de la classe dérivée, il a immédiatement commencé à fonctionner.