asp.net - 직렬화 - c# string to json




Newtonsoft.Json 직렬화는 빈 json 객체를 반환합니다. (2)

기본적으로 NewtonSoft.Json은 공개 멤버를 serialize하기 만하므로 필드를 공개로 설정하십시오.

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;
    }
}

편집 : 어떤 이유로 필드를 공개하지 않으려면 JsonPropertyAttribute 를 사용하여 필드를 데코 레이팅하여 직렬화 및 비 직렬화 할 수 있습니다.

[JsonProperty]
int catagoryId;

다음 클래스의 객체 목록이 있습니다.

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);

나는 결과를 얻고있다.

[{}, {}, {}, {}, {}]

이 문제에 대해 저를 도우십시오.


또한 각 클래스에 [JsonProperty]를 지정하지 않고도 원하는 모든 멤버를 직렬화하도록 클래스를 꾸밀 수 있습니다.

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

MemberSerialization 열거 형을 사용하면 serialize 할 멤버를 지정할 수 있습니다.

  • MemberSerialization.OptOut : 모든 public 멤버가 serialize됩니다.
  • MemberSerialization.OptIn : JsonPropertyAttribute 또는 DataMemberAttribute로 표시된 멤버 만 serialize됩니다.
  • MemberSerialization.Fields : 모든 public 및 private 멤버가 serialize됩니다.




json.net