Newtonsoft中JArray 轉成list<object>
阿新 • • 發佈:2020-10-14
現在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(dynamicobj){}
使用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>>(); } }