动态对象与JSON
ExpandoObject可以和JSON字符串相互转换
。
因为可以用圆点符号(.)访问数据,所以我个人更喜欢用ExpandoObject,而不是JOject,只是因为后者出现得早一点,所以本文档用JObject更多
。
示例一
ExpandoObject转JSON字符串,请在命令窗口测试执行:
Dim
user
As
Object
=
New
ExpandoObject()
user.Name =
"李四"
user.Age = 30
user.City =
"上海"
Dim
json
As
String
= JsonConvert.SerializeObject(user)
Output.Show(json)
输出结果为:
{"Name":"李四","Age":30,"City":"上海"}
示例二
JSON字符串转ExpandoObject,请在命令窗口测试执行:
Dim
json
As
String
=
"{'Name':'李四','Age':30,'City':'上海'}"
Dim
user
As
Object
= JsonConvert.DeserializeObject(Of
ExpandoObject)(json)
Output.Show(user.Name)
Output.Show(user.Age)
Output.Show(user.City)
输出结果为:
李四
30
上海
示例三
复杂对象的序列化,请在命令窗口测试执行:
Dim
user
As
Object
=
New
ExpandoObject()
user.name =
"张三"
user.age = 30
user.address =
New
ExpandoObject()
'嵌套对象
user.address.city =
"北京"
user.address.street =
"长安街"
user.hobbies = {"读书",
"游泳",
"编程"}
'数组
Dim
json
As
String
= JsonConvert.SerializeObject(user)
Output.Show(json)
输出结果:
{"name":"张三","age":30,"address":{"city":"北京","street":"长安街"},"hobbies":["读书","游泳","编程"]}
示例四
复杂对象的反序列化,请在命令窗口测试执行:
Dim
json
As
String
=
<![CDATA[
{
"name": "张三",
"age": 30,
"address": {
"city": "北京",
"street": "长安街"
},
"hobbies": ["读书",
"游泳",
"编程"]
}
]]>.Value
Dim
user
As
Object
= JsonConvert.DeserializeObject(Of
ExpandoObject)(json)
Output.Show(user.Name)
Output.Show(user.Age)
Output.Show(user.address.city)
'嵌套对象会被反序列化成ExpandoObject
Output.Show(user.address.street)
For
i
As
Integer
= 0
To
user.hobbies.Count - 1
'注意反序列化之后,数组会变为集合(list)
Output.Show(user.hobbies(i))
Next