簡體   English   中英

將json字符串反序列化為c#中的對象(Newtonsoft.Json)

[英]deserializing the json string to object in c# (Newtonsoft.Json)

我想將json字符串反序列化為具有以下格式的c#對象

[{
"data": "{\"SecureId\":null,\"FNAME\":\"WILL\",\"MNAME\":null,\"LNAME\":\"CLINTON\",\"POSTNAME\":\"Mrs.\",\"DOB\":\"6/10/1997\",\"GENDER\":\"M\",\"ORGID\":null}",
"isAvial": true,
"details": "55",
"id": "1999089"}, {
"data": "{\"SecureId\":null,\"FNAME\":\"RIN\",\"MNAME\":null,\"LNAME\":\"MANN\",\"POSTNAME\":\"Jr\",\"DOB\":\"9/16/1997\",\"GENDER\":\"F\",\"ORGID\":null}",
"isAvial": true,
"details": "P2145",
"id": "1999090"}, {
"data": "{\"SecureId\":null,\"FNAME\":\"RIN\",\"MNAME\":null,\"LNAME\":\"MANNING\",\"POSTNAME\":\"M.D.\",\"DOB\":\"9/16/1997\",\"GENDER\":\"F\",\"ORGID\":null}",
"isAvial": true,
"details": "205",
"id": "1999091"}, {
"data": "{\"SecureId\":null,\"FNAME\":\"David\",\"MNAME\":null,\"LNAME\":\"O'PETER\",\"POSTNAME\":\"Dr\",\"DOB\":\"9/6/1997\",\"GENDER\":\"M\",\"ORGID\":null}",
"isAvial": true,
"details": "PM25",
"id": "1999092"}]

我嘗試了以下方法,但是沒有用。 我正在使用Newtonsoft.json

public class DataObj
{
    public string isAvial { get; set; }
    public string details { get; set; }
    public string id { get; set; }
    public DataTable data { get; set; }
}
public class JsonOutput
{
    public List<DataObj> DetailsObj { get; set; }
}

var desc = JsonConvert.DeserializeObject<List<JsonOutput>>(jsonstring);

感謝幫助..

之所以失敗,是因為您的JSON是數組,但是您試圖反序列化為包含數組的對象,而不是直接反序列化為數組或列表。 同樣,我也非常懷疑您的屬性data可以反序列化,您可能必須編寫自定義代碼以對DataTable進行反序列化,或者應使用自定義類型將其更改為通用列表/集合。

public class DataObj
{
    public string isAvial { get; set; }
    public string details { get; set; }
    public string id { get; set; }
    // public DataTable data { get; set; } // if this is the FCL defined DataTable you will not be able to deserialize it without some custom code. Better would be to have a strongly typed custom class 
}

var desc = JsonConvert.DeserializeObject<List<DataObj>>(jsonstring);

如果“數據”中的格式正確。 然后這將解決

public class DataObj
{
    public string isAvial { get; set; }
    public string details { get; set; }
    public string id { get; set; }
    public DataTable data { get; set; } 
} 
var desc = JsonConvert.DeserializeObject<List<DataObj>>(jsonstring);

否則單獨解析Datatable或類似的東西(DataTable)JsonConvert.DeserializeObject(JsonString,(typeof(DataTable)));

在您的JSON對象中,您有一個DataObj對象的列表,因此(假設DataTable類根據JSON結構正確描述),您應該使用以下內容進行反序列化:

var desc = JsonConvert.DeserializeObject<List<DataObj>>(jsonstring);

嘗試

public class dataC
{
    public int SecureId { get; set; }
    public string FNAME { get; set; }
    public string  MNAME { get; set; }
    public string LNAME { get; set; }
    public string POSTNAME { get; set; }
    public string DOB { get; set; }
    public string GENDER { get; set; }
    public int ORGID { get; set; }
}


public class DataObj
    {
        public dataC data { get; set; }
        public bool isAvial { get; set; }
        public string details { get; set; }
        public string id { get; set; }
    }


JsonConvert.DeserializeObject<List<DataObj>>(jsonstring);

您的反序列化課程應該像

 public class RootObject
    {
        private object _data;

        public object data
        {
            get
            {
                return _data;
            }
            set
            {
                _data = JsonConvert.DeserializeObject<dataS>(value.ToString());
            }
        }

        public bool isAvial { get; set; }
        public string details { get; set; }
        public string id { get; set; }
    }

    public class dataS
    {
        public object SecureId { get; set; }
        public string FNAME { get; set; }
        public object MNAME { get; set; }
        public string LNAME { get; set; }
        public string POSTNAME { get; set; }
        public string DOB { get; set; }
        public string GENDER { get; set; }
        public object ORGID { get; set; }
    }

和序列化應該像

var tmp = JsonConvert.DeserializeObject<List<RootObject>>(json);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM