读json字符串

时间:2011-12-01 23:21:40

标签: c# vb.net json

任何人都可以帮助我将以下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

但这给了我一个安全例外。

任何向正确方向指责或推动的帮助都会有所帮助。

2 个答案:

答案 0 :(得分:1)

我的建议是使用Json.Net,你可以编写代码来手动进行解析,但这就是库的用途:) Json.NET

答案 1 :(得分:0)

基本上,无论您使用何种计算语言,JSON都会读取相同内容。区别在于它创造的对象。

基本上会有五个:

  1. 阵列
  2. 字典(JSON称之为“对象”)
  3. 字符串
  4. 数字(包含变体 - 浮点数,整数等)
  5. 代表“NULL”的东西
  6. 您的字符串以[开头,代表一个数组。在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”作为结果。