Newtonsoft.La sérialisation Json retourne vide d'objet json
J'ai la liste des objets de la 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;
}
}
quand je suis à la conversion de cette liste de chaîne json en utilisant Newtonsoft.Json, il renvoie un tableau d'objets vides.
string json=JsonConvert.SerializeObject(list);
J'obtiens le résultat suivant.
[{},{},{},{},{}]
Merci de m'aider sur ce problème.
- Êtes-vous sûr que la liste n'est pas la liste des Objets nuls. Comme vous l'avez déclaré
Parameterzied
constructeur. Si vous souhaitez créer d'objet vide, alors vous devez déclarer manuellement leempty
constructeur dans la classe. - ouais il n'y a pas des objets null dans la liste
- J'ai eu le même problème à l'aide de l'Jackson bibliothèque. Rendre les champs publique résolu le problème.
Vous devez vous connecter pour publier un commentaire.
Par défaut, NewtonSoft.Json ne sérialiser des membres du public, afin de faire de votre champs de public:
Edit: Si pour quelque raison vous ne voulez vraiment pas à faire vos champs public, à la place, vous pouvez les décorer avec de la JsonPropertyAttribute pour leur permettre de sérialiser et désérialiser:
JsonPropertyAttribute
pour indiquer qu'un champ ou une propriété doit être sérialisé:[JsonProperty]private int categoryId;
public
!Vous pouvez également décorer votre classe pour sérialiser tous les membres que vous voulez sans avoir à spécifier [JsonProperty] pour chacun d'eux.
La MemberSerialization enum permet de spécifier ce que vous souhaitez pour sérialiser:
Une autre cause de ce problème, la classe que j'essayais de sérialiser dérivée d'une classe de base qui a eu le
[DataContract]
attribut, mais la classe dérivée manquait de cet attribut. Une fois 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 commencé à travailler immédiatement.