『动态』动态JSON万能转换函数 + .Net40 dynamic动态数据绑定

不废话,调用代码:

 1         static void Main(string[] args)
 2         {
 3             string json = File.ReadAllText("2.txt", Encoding.Default);
 4 
 5             object result = JsonConvert.DeserializeObject(json);
 6             //dynamic result = JsonConvert.DeserializeObject<dynamic>(json);  //这行函数 啥用都没有 //虽然 result 是 dynamic 定义, 但其实还是 JObject 类型 —— 这种类型是 Newtonsoft.Json 中的一个实体
 7 
 8             //需要对 动态JSON 进行一个 转换
 9             dynamic result2 = JsonObjectToDynamic(result);
10             dynamic text = result2.DKS.Text;
11             Console.WriteLine(text);
12 
13 
14             //--------------------------------
15             //动态对象 测试
16             dynamic dyna = new DynamicModel();
17             dyna["Name"] = "张三";
18             dyna["Birthday"] = new DateTime(1990, 02, 15);
19 
20             Console.WriteLine(dyna.Name);
21             Console.WriteLine(dyna.Birthday);
22 
23 
24         }

 

运行截图:

 

完整Demo代码:

  1     class Program
  2     {
  3         static void Main(string[] args)
  4         {
  5             string json = File.ReadAllText("2.txt", Encoding.Default);
  6 
  7             object result = JsonConvert.DeserializeObject(json);
  8             //dynamic result = JsonConvert.DeserializeObject<dynamic>(json);  //这行函数 啥用都没有 //虽然 result 是 dynamic 定义, 但其实还是 JObject 类型 —— 这种类型是 Newtonsoft.Json 中的一个实体
  9 
 10             //需要对 动态JSON 进行一个 转换
 11             dynamic result2 = JsonObjectToDynamic(result);
 12             dynamic text = result2.DKS.Text;
 13             Console.WriteLine(text);
 14 
 15 
 16             //--------------------------------
 17             //动态对象 测试
 18             dynamic dyna = new DynamicModel();
 19             dyna["Name"] = "张三";
 20             dyna["Birthday"] = new DateTime(1990, 02, 15);
 21 
 22             Console.WriteLine(dyna.Name);
 23             Console.WriteLine(dyna.Birthday);
 24 
 25 
 26         }
 27 
 28         private static dynamic JsonObjectToDynamic(object jToken)
 29         {
 30             if (jToken == null) return null;
 31 
 32             if (jToken is JValue)
 33             {
 34                 return ((JValue) jToken).Value;
 35             }
 36             else if (jToken is JArray)
 37             {
 38                 dynamic list = new List<object>();
 39                 JArray array = (JArray)jToken; //JArray
 40                 if (array.HasValues)
 41                 {
 42                     foreach (object item in array) //JToken
 43                     {
 44                         object value = JsonObjectToDynamic(item);
 45                         list.Add(value);
 46                     }
 47                 }
 48                 return list;
 49             }
 50             //else if (string.Equals(typeName, "JContainer", StringComparison.InvariantCultureIgnoreCase))  //JObject JArray JConstructor 都继承自 JContainer 
 51             else if (jToken is JContainer)
 52             {
 53                 DynamicModel hash = new DynamicModel();
 54                 JContainer container = (JContainer)jToken;  //JContainer
 55                 if (container.HasValues)
 56                 {
 57                     foreach (JToken item in container) //JToken
 58                     {
 59                         if (item is JProperty)
 60                         {
 61                             JProperty itemProperty = (JProperty) item;
 62                             if (item.Type == JTokenType.Property)
 63                                 hash[itemProperty.Name] = JsonObjectToDynamic(itemProperty.Value);
 64                         }
 65                         else
 66                             throw new Exception(string.Format("JsonObjectToDynamic(*) 函数缺陷, 未知类型: " + item.GetType()));
 67                     }
 68                 }
 69                 return hash;
 70             }
 71 
 72             throw new Exception(string.Format("JsonObjectToDynamic(*) 函数缺陷, 未知类型: " + jToken.GetType()));
 73         }
 74         public class DynamicModel : DynamicObject
 75         {
 76             private Dictionary<string, object> m_Hash = new Dictionary<string, object>();
 77             //private Dictionary<string, object> m_Hash = new Dictionary<string, object>(StringComparer.InvariantCultureIgnoreCase);  //不区分大小写
 78 
 79             public object this[string key]
 80             {
 81                 get
 82                 {
 83                     object value = null;
 84                     m_Hash.TryGetValue(key, out value);
 85                     return value;
 86                 }
 87                 set {
 88                     if (m_Hash.ContainsKey(key)) m_Hash[key] = value;
 89                     else m_Hash.Add(key, value);
 90                 }
 91             }
 92 
 93 
 94             public override bool TryGetMember(GetMemberBinder binder, out object result)
 95             {
 96                 string name = binder.Name;
 97                 return m_Hash.TryGetValue(name, out result);
 98             }
 99             public override bool TrySetMember(SetMemberBinder binder, object value)
100             {
101                 this[binder.Name] = value;
102                 return true;
103             }
104         }
105 
106 
107     }
View Code

 

转载于:https://www.cnblogs.com/shuxiaolong/p/Json_To_Dynamic.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
帆软报表是一款强大的报表设计与生成工具,它支持使用动态JSON数据集。动态JSON数据集是指在报表设计过程中,通过使用取数公式来动态获取JSON数据,并将其作为报表的数据源。 动态JSON数据集的取数公式可以使用JSONVAL函数来实现,该函数可以从JSON字符串中提取指定的值。例如,JSONVAL('{"k1":"v1", "k2":["v21", "v22"], "k3":{"k31":"v31"}}', 'k1')将返回v1,表示提取JSON字符串中键k1对应的值。 在帆软报表中,可以使用动态JSON数据集来实现各种复杂的报表需求,例如根据用户选择的条件动态生成报表数据,或者从外部系统获取实时的JSON数据作为报表数据源。 使用动态JSON数据集的步骤如下: 1. 在报表设计界面中,选择数据源为动态JSON数据集。 2. 设置取数公式,根据需要从JSON数据中提取所需的字段值。 3. 将取得的字段值与报表设计中的数据项进行映射,以便在报表中显示。 通过使用帆软报表的动态JSON数据集,可以轻松实现报表数据的动态加载与展示,满足不同的报表需求。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [这是一个针对ECharts3.x(2.x)版本的Java类库,实现了所有ECharts中的Json结构对应的Java对象,并且可](https://download.csdn.net/download/hanzhuhuaa/88245563)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [帆软报表自定义函数-取json数据](https://blog.csdn.net/meism5/article/details/104510295)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值