任何人都可以帮助我将以下json字符串读入对象。
[ { "category": "burglary", "month": "2011-08", "location": { "latitude": "52.6361452", "street": { "id": 62819, "name": "On or near Burton Street" }, "longitude": "-1.1243242" }, "context": "", "id": 4051044 },...
我创建了一个包含每种类型对象的类,名为' crime'然后是以下内容:
Dim listArray As New List(Of crimes)()
Using jsonStream = New System.IO.MemoryStream(System.Text.Encoding.UTF8.GetBytes(strString))
Dim serializer As New DataContractJsonSerializer(GetType(List(Of crimes)))
Dim array As List(Of crimes) = TryCast(serializer.ReadObject(jsonStream), List(Of crimes))
listArray = array
End Using
但这给了我一个安全例外。
任何向正确方向指责或推动的帮助都会有所帮助。
答案 0 :(得分:1)
我的建议是使用Json.Net,你可以编写代码来手动进行解析,但这就是库的用途:) Json.NET
答案 1 :(得分:0)
基本上,无论您使用何种计算语言,JSON都会读取相同内容。区别在于它创造的对象。
基本上会有五个:
您的字符串以[
开头,代表一个数组。在Objective-C中,这将作为NSArray返回,在Java中可能是一个ArrayList。不确定C#的典型特征。
所以在数组中是元素,用逗号分隔(,
)。在一般情况下,这些可以是上述5种类型中的任何一种。下一个符号是{
,表示字典/对象。这是名称/值对的集合。在Objective-C中,它可能是一个NSDictionary,在Java中也许是一个HashMap。然后,您会看到名称/值对,每对的两个部分由:
分隔,并且两个部分由,
分隔开。第一部分是名称,始终用引号,始终是字符串。第二部分是值,可以是上述5种类型中的任何一种。 (请记住,数组元素是有序的,但“对象”中的名称/值对可以按任何顺序排列 - 当JSON从一种形式转换为另一种形式时,不会保留顺序。)
在您的情况下,第一个名称/值对是"category": "burglary"
。这意味着名为“category”的项目的值为“burglary”。
你看得更远"location": { "latitude": "52.6361452" ...
。这意味着名称/值对的名称为“location”,而值为另一个字典/对象。因此,当您从解析器的输出中获取值“location”时,您将获得语言对字典/对象的表示。
请注意,这意味着,对于一般情况,您需要检查在“剥离洋葱层”时获取的对象类型以获取所需的数据项。
但是一些JSON工具包提供了一种基于路径的机制来获取所需的项目。例如,要求“0.location.latitude”或其他一些,并得到“52.6361452”作为结果。