現在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>>();
}
}