嘿,我正在尝试组合2个JObject列表。我有一个名为masterJsonList.Add(jsonWriter.Token)和master JsonListNA.Add(jsonWriter.Token).的2列表(属于JObject)
在搜索谷歌时,我没有找到任何东西向我展示如何将JObectsmasterJsonListNA组合到master JsonList。
当我尝试时:
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值,而不是同时得到masterJson List&masterJsonListNA。
masterJsonList.Union(masterJsonListNA)
Dim finalJson As String = JsonConvert.SerializeObject(masterJsonList, Formatting.Indented)
再次使用Union没有错误,但我也再次只获得finalJson中的masterJsonList值,而不是同时获得masterJson List&masterJsonListNA。
我知道如果我这样做它是有效的:
Dim combinedJsons As Object = masterJsonList.Concat(masterJsonListNA)
Dim finalJson As String = JsonConvert.SerializeObject(combinedJsons, Formatting.Indented)
但我想知道这是否是正确的方式?
是。你最后的猜测是正确的。扩展方法Concat
、Union
等不会对调用它们的对象进行操作,而是返回包含操作结果的新对象。实际上,我们不需要combinedList
的As
子句,让编译器来推断它,就像这样:
Dim combinedJsons = masterJsonList.Concat(masterJsonListNA)
但是,如果你不需要combinedJsons
做任何其他事情,你可以用Concat
来代替SerializeObject
:的第一个参数
Dim finalJson = JsonConvert.SerializeObject(masterJsonList.Concat(masterJsonListNA), Formatting.Indented)
另一方面,List<T>.Add()
方法对其调用的实例有效,但它添加了T
类型的对象,而不是T
类型的整个列表。