Newtonsoft.JSON serialization retourne un objet JSON vide

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 convertis cette liste en chaîne json en utilisant Newtonsoft.Json 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.

25
demandé sur VIVEK 2015-03-12 09:29:35
la source

2 ответов

par défaut, NewtonSoft.Json ne sérialisera que les membres publics, alors rendez 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 à la place les décorer avec le JsonPropertyAttribute afin de leur permettre de sérialiser et désérialiser:

[JsonProperty]
int catagoryId;
60
répondu JLRishe 2016-09-06 13:31:50
la source

Vous pouvez aussi décorer votre classe pour sérialiser tous les membres que vous voulez sans avoir à spécifier [JsonProperty] pour chacun d'eux.

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

MemberSerialization enum vous permet de spécifier quels membres vous voulez sérialiser:

  • MemberSerialization.OptOut: tous les membres du public sont sérialisés.
  • MemberSerialization.OptIn: seuls les membres Marqués de JsonPropertyAttribute ou DataMemberAttribute sont sérialisés.
  • MemberSerialization.Les champs: tous les membres publics et privés sont sérialisés.
6
répondu joalcego 2017-02-21 17:24:32
la source

Autres questions sur