C# 解析key值动态的json数据

先贴出要解析的数据格式:

{
    "C0:00:56:6E:01:36":{
        "model":"iw-02",
        "rssi":-82,
        "routerMac":"CC:1B:E0:E8:33:14",
        "node":"C0:00:5B:6E:01:36",
        "step":880,
        "calorie":27.5,
        "heartrate":0,
        "battery":53,
        "sportType":1,
        "timestamp":1534388343158,
        "position":"CC:1B:E0:E8:33:14"
    },
    "C0:00:5B:33:71:B8":{
        "model":"iw-02",
        "rssi":-82,
        "routerMac":"CC:11:E0:E1:33:14",
        "node":"C0:00:5B:3F:71:B8",
        "step":267,
        "calorie":8.6,
        "heartrate":0,
        "battery":96,
        "sportType":1,
        "timestamp":1534388327140,
        "position":"CC:11:E0:E1:33:14"
    },
    "type":"breceletData"
}

先介绍下场景,我在写一个API Post接口,数据是第三方给我发过来的,

数据格式不爽也没办法,第三方的么。

上面的例子数据是一次发过来的一条json,没有key,

里面的一个Mac地址对应的一个对象就是一个设备的数据,数量不固定,可能是0也可能是几十几百个。

上面的数据可以看出来几个跟我们正常不太一样的地方:

1、key的值不固定,因为每个设备的Mac地址不一样;

2、每条数据最后都有个异类"type" : "xxxx";

试了很多方式去解析,直接贴出最后解决办法:

var model = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(jsonStr);

            // 3、遍历字典 并将各个条目保存到数据库
            foreach (var item in model)
            {
                if (!(item.Value is string))
                {
                  // 假装取出每个设备的Model字段
                  var itemModel = item.Value.model;
                }
            }

注:解析的方式不固定,你可以使用别的解析方式,主要是目标类型的设置,

解析的时候直接使用字典来接收,但是考虑到最后那个type异类

所以字典的value的类型设置为dynamic类型,

dynamic作用类似object,但是被设置的位置可以逃过静态检查。

注:在foreach遍历中,还是要考虑type这个异类,使用value值的类型不是string即可解决。

然后我假装取了一个字段。

猜你喜欢

转载自blog.csdn.net/geanwen/article/details/81745198