Newtonsoft中JArray 轉成list

現在webapi一般使用json,從前端提交的數據,有時會包括多個數據,如:

var list = [
    {id: '1', name: 'name1'},
    {id: '2', name: 'name2'},
    {id: '3', name: 'name3'},
    {id: '4', name: 'name4'},
]
data: {
    name: 'name1',
    list: list,
    ... ...
}

在后台接口獲取參數時,很多時候會使用dynamic,如:

[HttpPost]
public object SaveData(dynamic obj){}

使用dynamic作為數據類型時,獲取其中的數據后需要顯示的轉換為相應的類型,如:

[HttpPost]
public object SaveData(dynamic obj){
    string name = obj.Name.ToString();
    int num = Convert.ToInt32(obj.Num);
}

同樣的,數組類型也需要顯示轉換,如:
前端提交數據:

var list = [
    {id: '1', name :'name1'},
    {id: '2', name :'name2'},
    {id: '3', name :'name3'},
    {id: '4', name :'name4'}
];
$.ajax({
    url: '...',
    data: {
        ... ...
        list: list,
        ... ...
    }
})

后端接受數據:

 

public class Person{
    public string ID { get; set;}
    public string Name { get; set;}
}

[HttpPost]
public object SaveData(dynamic obj){
    //List<Person> list = obj.list;        報錯,無法將Newtonsoft.Json.Linq.JArray隱式轉換為List<T>
    List<Person> list = obj.list.ToObject<List<Person>>();    // 正確
}

 

還有例如:

//如果本地圖片還存在,進行百度apk識別
                    if (fi.Exists)
                    {
                        //(3)仍然本地存在的圖片,進行百度apk識別
                        string strJson = WebImageDemo(item.FullName).ToString();

                        Dictionary<string, object> dic = JsonConvert.DeserializeObject<Dictionary<string, object>>(strJson);
                        //日志Id
                        string log_id = "";
                        //返回文本數組內文本個數
                        int words_result_num = 0;
                        //文本結果是個對象數組
                        object words_result = null;
                        //申明對象數組

                        Newtonsoft.Json.Linq.JArray jarr;
                        foreach (KeyValuePair<string, object> keyValue in dic)
                        {
                            if (keyValue.Key == "log_id")
                            {
                                log_id = keyValue.Value.ToString();
                            }
                            if (keyValue.Key == "words_result_num")
                            {
                                words_result_num = Convert.ToInt32(keyValue.Value.ToString());
                            }
                            if (keyValue.Key == "words_result")
                            {
                                words_result = keyValue.Value; }
                        }
                        //如果返回文本數組個數大於0,說明有值
                        if (words_result_num > 0)
                        {
                            //將對象強制轉換為對象數組
                            jarr = (Newtonsoft.Json.Linq.JArray)words_result;

                            List<ApkWords> list = jarr.ToObject<List<ApkWords>>();
                        }
                    }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。