JSON.net将2个列表(Of JObject)组合在一起

时间:2016-06-04 07:12:48

标签: json vb.net json.net

Heyy我试图将 2个JObject列表组合起来。我有 2列表(Of JObject)名为 masterJsonList.Add(jsonWriter.Token) masterJsonListNA.Add(jsonWriter.Token)

我在搜索Google时没有找到任何内容,告诉我如何将JObects masterJsonListNA masterJsonList 结合起来。

当我尝试:

masterJsonList.Add(masterJsonListNA) '<-- error here
Dim finalJson As String = JsonConvert.SerializeObject(masterJsonList, Formatting.Indented)

它给出了错误:

  

错误BC30311“List(Of JObject)”类型的值无法转换为“JObject”。

我甚至尝试了以下但没有运气:

masterJsonList.Concat(masterJsonListNA)
Dim finalJson As String = JsonConvert.SerializeObject(masterJsonList, Formatting.Indented)

虽然使用 Concat 没有错误,但我只获得 finalJson 中的 masterJsonList 值,而不是 masterJsonList &amp;的 masterJsonListNA

masterJsonList.Union(masterJsonListNA)
Dim finalJson As String = JsonConvert.SerializeObject(masterJsonList, Formatting.Indented)

再次使用联盟没有错误,但我也只能在 finalJson 中获得 masterJsonList 值,而不是 masterJsonList &amp;的 masterJsonListNA

如果我这样做,我知道它有效:

Dim combinedJsons As Object = masterJsonList.Concat(masterJsonListNA)
Dim finalJson As String = JsonConvert.SerializeObject(combinedJsons, Formatting.Indented)

但我想知道这是正确的做法吗?

1 个答案:

答案 0 :(得分:1)

是。你的最后猜测是正确的。扩展方法ConcatUnion等不会对它们被调用的对象进行操作。相反,它们返回包含操作结果的新对象。对As实际上你不需要我们combinedList子句 - 让编译器推断它,就像这样:

Dim combinedJsons = masterJsonList.Concat(masterJsonListNA)

但如果您不需要combinedJsons其他任何内容,您可以Concat代替SerializeObject的第一个参数列表:

Dim finalJson = JsonConvert.SerializeObject(masterJsonList.Concat(masterJsonListNA), Formatting.Indented)

另一方面,List<T>.Add()方法对调用它的实例起作用,但是它添加了T类型的对象,而不是类型T的整个列表。