zoukankan      html  css  js  c++  java
  • Newtonsoft中JArray 转成list<object>

    现在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>>();
                            }
                        }
  • 相关阅读:
    一道网易面试题
    OC的引用计数
    ReplayKit2 采集音视频回调格式分析
    《剑指offer3- 从末尾到头打印链表》
    《剑指offer
    《剑指offer
    ReplayKit2:声音回调时间戳问题
    UILable在Autolayout模式下面自动调节字体大小
    建表手写语句
    oracle创建主键序列和在ibatis中应用
  • 原文地址:https://www.cnblogs.com/BluceLee/p/13815348.html
Copyright © 2011-2022 走看看