1
strawberryBug 2022-05-22 18:42:53 +08:00 via Android
jsonPath
|
2
xupefei 2022-05-22 18:47:31 +08:00 via iPhone
dynamic ?
|
3
andrew2558 2022-05-22 18:51:07 +08:00
不是可以直接反序列化吗?再复杂都可以
|
4
lukaz 2022-05-22 19:31:36 +08:00 via iPhone
JToken
|
5
BiChengfei 2022-05-22 20:11:16 +08:00 1
json 工具类反序列化都可以吧
|
6
ration 2022-05-22 21:26:57 +08:00 via Android
其实建议还是用类转化。
|
7
qiyue0726 OP @andrew2558 为什么我之前好像用 dictionary<string,ArrayList<dictionary<string,object>>> 这样的类型做转换类型,会报错,是我哪里写的有问题吗
|
8
INCerry 2022-05-23 11:45:17 +08:00
和 java 一样的 dictionary 就可以了
|
9
yuandong 2022-05-29 21:25:27 +08:00
JToken
|
10
sinnosong1 2022-05-30 09:46:34 +08:00
@qiyue0726 namespace:Newtonsoft.Json.Linq 这样写 JObject.Parse(apiResponse).SelectToken("detail").Value<string>()
|
11
qiyue0726 OP @sinnosong1 我没用过 linq ,这看起来是把 json 字符串当成数据库去查询?
|
12
sinnosong1 2022-05-31 22:08:48 +08:00 1
@qiyue0726 不是的,JObject.Parse()之后返回的是 JToken 对象(可以理解为 Gson 库提供的 JsonObject ),然后可以对 JToken 使用 SelectToken()方法查询这个 JToken 中的第一层属性,如果属性也是对象的话还可以继续查询。example:
var str = "{\"name\":{\"age\":1},\"address\":\"china\"}"; JObject jsonObj = JObject.Parse(str); var age = jsonObj.SelectToken("name").SelectToken("age").Value<int>(); Console.WriteLine(age+", type:"+age.GetType()); var address=jsonObj.SelectToken("address").Value<string>(); Console.WriteLine(address+", type:"+address.GetType()); |
13
sinnosong1 2022-05-31 22:09:16 +08:00
@qiyue0726 实际就是 linq😂
|
14
forgottencoast 2022-06-02 22:45:20 +08:00
如果你想要性能,或是读取其中某些值,那就用流( Reader )来处理。
如果你需要整个 json 对象,那就用反序列化成对象。 还有像使用 HTML DOM 一样来处理的方式( Document ),如果你熟悉这个也可以用这种方式。 |
15
Kevin2 2022-06-21 13:13:04 +08:00
|
16
ColinZeb 2022-07-29 16:08:49 +08:00
@sinnosong1 这不是 linq ,这是动态对象
|