【发布时间】:2016-07-27 20:50:37
【问题描述】:
这篇文章旨在提出与我最近的另一篇文章 (Picking Out Simple Properties from Hierarchical JSON Part II) 相关的更直接的问题:
给定嵌套的 JSON 文档,如下所示:
{
"Array1": {
"Array1A": [
{ "Item1": "1" },
{ "Item2": "2" },
{ "Item3": "3" }
],
"Array1B": [
{ "Item1": "1" },
{ "Item2": "2" },
{ "Item3": "3" }
]
},
"Array2": {
"Array2A": [
{ "Item1": "1" },
{ "Item2": "2" },
{ "Item3": "3" }
]
},
"Array3": {
"Array3A": [
{ "Item1": "1" },
{ "Item2": "2" },
{ "Item3": "3" }
],
"Array3B": [
{ "Item1": "1" },
{ "Item2": "2" },
{
"Array3B1": [
{ "Item1": "1" },
{ "Item2": "2" },
{ "Item3": "3" }
]
}
],
"Array3C": [
{ "Item1": "1" },
{ "Item2": "2" },
{ "Item3": "3" }
]
}
}
(注意:以上已使用 JSLint 进行验证。)
请注意,JSON 是动态的——我事先不知道会有多少数组或数组将嵌套多深。
目标:
我的目标是在 List<JObject> 对象中表示每个数组(即 Array1、Array2、Array3、Array3A、Array3B 和 Array3B1)。列表中的每个项目都是 JProperty 对象的集合,其中包含该数组的字符串属性。因为 List 本身并不对分层数据进行建模,所以我需要向每个引用该数组的父项的 List<JObject> 项目添加一个合成属性。因此,Array1 的父级是一个空字符串; Array2 是 Array1,Array3 是 Array2,Array3A 是 Array3,Array3B 是 Array3,Array 3B1 是 Array3B...
问题:
1. 如何使用 C# Linq 创建一个如下所示的List<JObject> 对象:
list[0]:
{"Name":"Array1","Parent":""}
list[1]:
{"Name":"Array1A","Item1":"1","Item2":"2","Item3":"3","Parent":"Array1"}
list[2]:
{"Name":"Array1B","Item1":"1","Item2":"2","Item3":"3","Parent":"Array1"}
list[3]:
{"Name":"Array2","Parent":""}
list[4]:
{"Name":"Array2A","Item1":"1","Item2":"2","Item3":"3","Parent":"Array2"}
list[5]:
{"Name":"Array3","Parent":""}
list[6]:
{"Name":"Array3A","Item1":"1","Item2":"2","Item3":"3","Parent":"Array3"}
list[7]:
{"Name":"Array3B","Item1":"1","Item2":"2","Parent":"Array3"}
list[8]:
{"Name":"Array3B1","Item1":"1","Item2":"2","Item3":"3","Parent":"ArrayB"}
list[9]:
{"Name":"Array3C","Item1":"1","Item2":"2","Item3":"3","Parent":"Array3"}
请注意:
- 每个
List<JObject>只包含字符串属性。 - 在列表 [7] 中,缺少 Item2 之后的 JSON 令牌,因为它是一个数组。相反,该项目在 list[8] 中用正确的父引用表示。
【问题讨论】: