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();