生成JSON
我们当然可以手工编码生成JSON,但是比较繁琐,容易出错。
如果采用Newtonsoft.JSON生成,会变得简单可靠。
Foxtable已经引入了以下两个命名空间:
Newtonsoft.Json
Newtonsoft.Json.Linq
你可以直接在代码中使用Newtonsoft.JSON进行JSON的系列化和反系列化。
如果已经熟悉了Newtonsoft.JSON,可以跳过本节内容。
示例一
根据现有对象生成JSON。
例如根据当前登录用户生成JSON,可在命令窗口执行:
Dim
jo As
JObject = JObject.FromObject(User)
Dim
js As
String = jo.ToString()
Output.Show(js)
显示的结果为:
{
"Name": "张三",
"Group": null,
"Type": 2,
"Tag": null,
"Roles": "经理",
"Default": false,
"ExtendedValues": {}
}
示例二
动态生成JSON。
在命令窗口执行:
Dim
jo As
New
JObject
jo("Name")
= "张三"
jo("Group")
= "VIP"
jo("Type")
= 2
jo("Default")
= False
Output.Show(jo.ToString)
显示的结果为:
{
"Name": "张三",
"Group": "VIP",
"Type": 2,
"Default": false
}
示例三
生成包括嵌套对象的JSON。
在命令窗口执行:
Dim
jo As
New
JObject
jo("name")
= "李云龙"
jo("age")
= "36"
jo("card")
= New
JObject
jo("card")("bank")
= "工行"
jo("card")("account")
= "12345678"
Output.Show(jo.ToString)
显示的结果为:
{
"name": "李云龙",
"age": "36",
"card": {
"bank": "工行",
"account": "12345678"
}
}
示例四
生成包括数组的JSON。
在命令窗口执行:
Dim
jo As
New
JObject
jo("Name")
= "张三"
jo("Group")
= "VIP"
Dim
ja As
New Jarray
'定义数组
ja.Add("manager")
ja.Add("developer")
jo("Roles")
= ja
'将Roles设置为前面定义的数组
Output.Show(jo.ToString)
显示的结果为:
{
"Name": "张三",
"Group": "VIP",
"Roles": [
"manager",
"developer"
]
}
下面是一段完全等效的代码,希望大家体会,在实际开发过程中灵活运用:
Dim
jo As
New
JObject
Dim
values() As
String = {"manager","developer"}
jo("Name")
= "张三"
jo("Group")
= "VIP"
jo("Roles")
= New Jarray(values)
Output.Show(jo.ToString)
示例五
生成包括对象数组的JSON。
在命令窗口执行:
Dim
jo As
New
JObject
Dim
ja As
New
JArray
jo("dept")
= "销售部"
jo("mpr")
= "赵刚"
jo("staff")
= ja
'
ja.Add(New
JObject)
'给数组添加两个对象成员
ja.Add(New
JObject)
ja(0)("name")
= "李云龙"
ja(0)("age")
= 36
ja(1)("name")
= "黄晓明"
ja(1)("age")
= 26
Output.Show(jo.ToString)
显示的结果为:
{
"dept": "销售部",
"mpr": "赵刚",
"staff": [
{
"name": "李云龙",
"age": 36
},
{
"name": "黄晓明",
"age": 26
}
]
}
对象数组也是一个数组,只不过这个数组的成员也是JObject,JObject的成员可以是数组,数组的成员可以是JObject,二者可以层层嵌套,生成任意复杂的JSON。