动态对象与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


本页地址:http://www.foxtable.com/webhelp/topics/6388.htm