需求:对于传统的Json字符串,比如有规定属性的对象,通常都会采用反序列化的方式就可以了;同样,如果出现不同属性,但具有相同的数据结构是,采用同一个接口传输时,就导致JSON数据属性动态变化,出现动态JSON.
例如处理固定属性结构的json:(devicename、propertydate、id、status、types 属性不变化,数值发生变化)
json字符串:
{
"devicename": "WO170330000375",
"propertydate": {
"id": "WO170330000376",
"status": "执行中",
"types": "system"
}
}
1、创建数据结构
public class Root
{
public string devicename{ get; set; }
public Propertydate propertydate{ get; set; }
}
public class Propertydate
{
public string id{ get; set; }
public string status{ get; set; }
public string types{ get; set; }
}
Root root=new Root();
Propertydate propertydate=new Propertydate();
JavaScriptSerializer js = new JavaScriptSerializer(); //实例化一个能够序列化数据的类
root= js.Deserialize<Demo>(json);//这个json即为上述字符串
propertydate=root.propertydate;
这样简单5行就把所有需要的值获取到了;
那么如何解决动态 属性的 JSON 字符串,如下所示 json1 与 json2;
//json1:
"datashape": {
"fieldDefinitions": {
"activePower": {
"name": "activePower",
"description": "有功功率",
"baseType": "NUMBER",
"ordinal": 0,
"aspects": {
"isPersistent": true,
"units": "kW"
"rows": {
"activePower": 0.7
//json2
"datashape": {
"fieldDefinitions": {
"reactivePower": {
"name": "activePower",
"description": "无功功率",
"baseType": "NUMBER",
"ordinal": 0,
"aspects": {
"isPersistent": true,
"units": "kW"
"rows": {
"reactivePower": 0.7
这里 json1 和 json2 在数据结构上时保持一致的,但是内部属性会根据功率不同变化。要解析这种多层动态变化的 json ,需要我们手动 去剥离动态变化的属性,把动态的属性剥离掉就可以拿到数据值。解决步骤如下:
1、创建数据结构
public class Root
public DataShape datashape { get; set; }
public CRows rows { get; set; }
public class CRows
public float activePower { get; set; }
public class DataShape
public FieldDefinitions fieldDefinitions { get; set; }
public class FieldDefinitions
public ActivePower activePower { get; set; }
public class ActivePower
public string name { get; set; }
public string description { get; set; }
public string baseType { get; set; }
public int ordinal { get; set; }
public Aspects aspects { get; set; }
利用 dynamic 动态类型逐步去分解(这里可以写一个递归去判断,这里为了简单演示就没有写了),将每一层的结果保存在 Dictionary<string, string>字典中,不断分解实现数据获取。
public static void GetValueForJson(string json,out Demo activePower,out float value)
var DynamicObject = JsonConvert.DeserializeObject<dynamic>(json.ToString());
Dictionary<string, string> dic = new Dictionary<string, string>();
foreach (var item in DynamicObject)
dic.Add(item.Name.ToLower(), item.Value.ToString());
string jstr2 = "";
KeyValuePair<string, string> kv1 = dic.ElementAt(0);
string jstr1 = kv1.Value;
var DynamicObject2 = JsonConvert.DeserializeObject<dynamic>(jstr1.ToString());
Dictionary<string, string> dic_1 = new Dictionary<string, string>();
foreach (var item in DynamicObject2)
dic_1.Add(item.Name.ToLower(), item.Value.ToString());
KeyValuePair<string, string> kv1_1 = dic_1.ElementAt(0);
string jstr1_1 = kv1_1.Value;
var DynamicObject3 = JsonConvert.DeserializeObject<dynamic>(jstr1_1.ToString());
Dictionary<string, string> dic_2 = new Dictionary<string, string>();
foreach (var item in DynamicObject3)
dic_2.Add(item.Name.ToLower(), item.Value.ToString());
KeyValuePair<string, string> kv1_2 = dic_2.ElementAt(0);
string jstr1_23 = kv1_2.Value;
JavaScriptSerializer js = new JavaScriptSerializer(); //实例化一个能够序列化数据的类
activePower = js.Deserialize<Demo>(jstr1_23);
KeyValuePair<string, string> kv2 = dic.ElementAt(1);
jstr2 = kv2.Value;
var DynamicObject4 = JsonConvert.DeserializeObject<dynamic>(jstr2.ToString());
Dictionary<string, string> dic_3 = new Dictionary<string, string>();
foreach (var item in DynamicObject4)
dic_3.Add(item.Name.ToLower(), item.Value.ToString());
KeyValuePair<string, string> kv1_3 = dic_3.ElementAt(0);
value = float.Parse(kv1_3.Value);
案例源代码下载:ConsoleApp5.rar-互联网文档类资源-CSDN文库
需求:对于传统的Json字符串,比如有规定属性的对象,通常都会采用反序列化的方式就可以了;同样,如果出现不同属性,但具有相同的数据结构是,采用同一个接口传输时,就导致JSON数据属性动态变化,出现动态JSON.例如处理固定属性结构的json:(devicename、propertydate、id、status、types 属性不变化,数值发生变化)json字符串:{ "devicename": "WO170330000375", "propertydate": { ...
本文实例讲述了C#实现json格式转换成对象并更换key的方法。分享给大家供大家参考。具体分析如下:
由于是不标准的序列化对象类型,因此你无法通过标准的反序列化类来实现,需要自定义一个序列化类或者简单点,直接自定义一个方法解析Json数据。解析后的数据用Dictionary来存放。
string str = {\name\: \甄嬛体\,\2012-05-04 14:59\: \5724\};
JavaScriptObject obj = JavaScriptConvert.DeserializeObject(str) as JavaScriptObject;
forea
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于JavaScript(Standard ECMA-262 3rd Edition – December 1999)的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C, C++, C#, Java, JavaScript, Perl, Python等)。这些特性使JSON成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成。
今天用python解析一个文本文件,格式如下:
"Key":"android.permission.ACC
System.Web.Extensions
c:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\v3.5\System.Web.Extensions.dll
接下来就是两个函数了,一个是根据key来获取,一个是根据index来获取
public static bool GetValue(string json, string key, out string value)
/// 从json中获取对应key的value值
/// </summary>
/// <param name="json字符串"></param>
/// <param name="需要取value对应的key">&am
本文实例讲述了C#实现解析百度天气数据,Rss解析百度新闻以及根据IP获取所在城市的方法,分享给大家供大家参考。具体实现方法如下:
一、百度天气
接口地址:http://api.map.baidu.com/telematics/v3/weather?location=上海&output=json&ak=hXWAgbsCC9UTkBO5V5Qg1WZ9,其中ak是密钥,自行去申请即可,便于大家测试,楼主就公布并了自己的Key,这样可以直接获取到数据。
获取到的数据是这样的:
代码如下:{“error”:0,”status”:”success”,”date”:”2014-10-27″,”resu
大多数情况下我们遇到的json数据一般都是key值是固定的,方便我们创建对应的实体类对象来进行解析。但有时候也会有些特殊情况,key值和value值一样都是动态未知的情况。如下所示:
data: {
"姓名": "老王",
"年龄": "41",
"性别": "男",
那如何解决呢?
直接贴代码:
JSONObject jsonObjec...
关于newtonsoft.json的使用常见问题参考:
《c#:序列化json常见问题及处理方法》
《c#:关于NewtonsoftJson序列化和Grpc序列化的冲突问题》
问题:如何在不新建类的情况下动态解析json字符串?
"Color": {
"Red": 0.8,
"Blue": 1.2
"Category": {
Localstorage是一种在Web浏览器中存储数据的技术,可以让Web应用程序在客户端存储键值对。在C#中解析localstorage需要使用JavaScriptSerializer类,该类是System.Web.Script.Serialization命名空间中的一个类。以下是解析localstorage的C#代码示例:
```csharp
using System.Web.Script.Serialization; // 引入 JavaScriptSerializer 类
// 从 Localstorage 获取数据
string data = (string)browser.EvaluateScript("localStorage.getItem('key')").Result;
// 将 JSON 格式的字符串转换为 C# 对象
JavaScriptSerializer serializer = new JavaScriptSerializer();
dynamic obj = serializer.Deserialize<dynamic>(data);
// 访问 C# 对象中的属性
string value = obj["property"];
在上面的代码中,我们首先使用EvaluateScript方法从本地存储中获取数据,然后使用JavaScriptSerializer类将JSON格式的字符串转换为C#对象。最后,我们可以访问C#对象中的属性来获取值。
本人认为还可以参考:这篇文章,作为补充更易理解
《为什么使用依赖注入_c#之控制反转(IOC)和依赖注入(DI)的理解》
https://blog.csdn.net/weixin_39844963/article/details/110813704?spm=1001.2101.3001.6650.4&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-4.pc_relevant_default&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7ERate-4.pc_relevant_default&utm_relevant_index=9