C#中的动态类型dynamic

23 篇文章 1 订阅
20 篇文章 0 订阅

1,动态类型dynamic最常见啊的使用就是在将json字符串接受下来,然后像操作是js操作json一样去处理数据,很轻盈的!废话不多说,上代码!

var  info = "{\"Account\":\"张三\",\"Pwd\":\"12323\"}";  //json字符串

var infoDynamic = JsonConvert.DeserializeObject<dynamic>(info);   //反序列化为 dynamic 对象

var AccountOne = infos.Account.Value;   // 结果为  "张三"

var AccountTwo = infos["Account"].Value;  // 结果为  "张三"

//上是处理当个对象,如果是处理多个对象的集合呢?很简单--把多个对象转成单个的去做处理不就行了

 string jsonstr = "{ \"listData\": [{\"Account\":\"张三\",\"Pwd\":\"12323\"},{\"Account\":\"李四\",\"Pwd\":\"9999\"}]  }";

 dynamic infosstr = JsonConvert.DeserializeObject(jsonstr);  

 var listobj= infosstr.listData;

  for (int i = 0; i < listobj.Count; i++)
  {
	string Accountv = listobj[i].Account.Value;   //获取到了 Account 的值!
  }

这是dynamic的简单用法,这个除外还有个类可以达到同样的效果

  JToken jt = JsonConvert.DeserializeObject<JToken>(resJsonStr);
  
 var data = jt["listData"].ToString();

也可以实现相同的效果!

动态遍历


```csharp
  string jsonstr = " [{\"Account\":\"张三\",\"Pwd\":\"12323\",\"age\":\"343\",\"opera\":\"mod\" },{\"Account\":\"李四\",\"Pwd\":\"9999\",\"opera\":\"add\"}]  ";
            dynamic infosstr = JsonConvert.DeserializeObject(jsonstr);

            for (int i = 0; i < infosstr.Count; i++)
            {
                var attrList = ((JObject)infosstr[i]).Properties().ToList();
                if (attrList.Where(p => p.Name == "opera" && ((JToken)p.Value).ToString() == "mod").ToList().Count > 0)
                {
                    attrList.ForEach(a =>
                    {
                        var Name = a.Name;
                        if (Name!= "opera")
                        {
                            var Value = ((JToken)a.Value).ToString();  
                            Console.WriteLine(Name + " :" + Value);
                        } 
                    });
                }

            }

在这里插入图片描述
这样根据不同数据动态处理了

Jobect创建动态对象

 IDataReader readers = dal.GetCtnoListByVno(Vno);
                JObject jobject = new JObject();
                List<JObject> jObjList = new List<JObject>();
                using (IDataReader row = readers)
                {
                    while (row.Read())
                    {
                        JObject jsonBody = new JObject();
                        if (row["ex_id"] is DBNull)
                            jsonBody.Add("Id", "");
                        else
                            jsonBody.Add("id", row["ex_id"].ToString());

                        if (row["ex_vno"] is DBNull)
                            jsonBody.Add("vno", "");
                        else
                            jsonBody.Add("vno", row["ex_vno"].ToString());

                        if (row["ex_ctnno"] is DBNull)
                            jsonBody.Add("ctnno", "");
                        else
                            jsonBody.Add("ctnno", row["ex_ctnno"].ToString());
                               
                        if (row["ex_pln_rsno"] is DBNull)
                            jsonBody.Add("plnRsno", "");
                        else
                            jsonBody.Add("plnRsno", row["ex_pln_rsno"].ToString());

                        if (row["ex_pln_accno"] is DBNull)
                            jsonBody.Add("plnAccno", "");
                        else
                            jsonBody.Add("plnAccno", row["ex_pln_accno"].ToString());

                        if (row["ex_tk_id"] is DBNull)
                            jsonBody.Add("tkId", "");
                        else
                            jsonBody.Add("tkId", row["ex_tk_id"].ToString());

                        if (row["ex_pln_id"] is DBNull)
                            jsonBody.Add("plnId", "");
                        else
                            jsonBody.Add("plnId", row["ex_pln_id"].ToString());

                        jObjList.Add(jsonBody);

                    }
                }
                jobject.Add(new JProperty("returnConList", jObjList));
                msg = jobject.ToString();
  • 3
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值