C# 读取json字符串

C# 读取json字符串,c#,vb.net,json,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 },... 我创建了一个类,包含每种

有人能帮我把下面的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 },...
我创建了一个类,包含每种类型的对象,称为“犯罪”,然后类似于以下内容:

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
但这给了我一个安全例外


任何值得赞赏的帮助或朝着正确的方向轻推都是有帮助的

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

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

基本上,无论您使用的是哪种计算语言,JSON的读取都是相同的。区别在于它创建的对象

基本上有五个:

  • 排列
  • 字典(JSON称之为“对象”)
  • 数字(带变量——浮点、整数等)
  • 表示“NULL”的东西
  • 字符串以表示数组的
    [
    开头。在Objective-C中,这将作为NSArray返回,在Java中可能是ArrayList。不确定C的典型情况

    因此,数组中有元素,用逗号(
    )分隔。在一般情况下,这些元素可以是上述5种类型中的任何一种。下一个符号是
    {
    ,表示一个字典/对象。这是一个名称/值对的集合。在Objective-C中,它将是一个NSDictionary,在Java中可能是一个HashMap。然后您会看到名称/值对,每对中的两个部分由
    分隔:
    ,每对之间由
    分隔。
    第一部分是名称,始终用引号括起来第二部分是值,它可以是上述5种类型中的任何一种(请记住,数组元素是有序的,但“对象”中的名称/值对可以是任意顺序的——当JSON从一种形式转换为另一种形式时,顺序不会保留)

    在您的情况下,名字/值对是
    “category”:“防盗”
    。这意味着名为“category”的物品的值为“防盗”

    稍远一点,您会看到
    “location”:{“latitude”:“52.6361452”…
    。这意味着名称/值对的名称为“location”,值是另一个字典/对象。因此,当您从解析器的输出中获取值“location”时,您将获得字典/对象的语言表示形式

    请注意,这意味着,对于一般情况,在“剥洋葱皮”以获取所需数据项时,需要检查返回的对象类型


    但是,一些JSON工具包提供了一种基于路径的机制来获取您想要的项目。例如,请求“0.location.latitude”或类似的内容,结果得到“52.6361452”。

    基本上,JSON读取的内容是相同的,而不管您使用的是什么计算语言。区别在于它创建的对象

    基本上有五个:

  • 排列
  • 字典(JSON称之为“对象”)
  • 数字(带变量——浮点、整数等)
  • 表示“NULL”的东西
  • 字符串以表示数组的
    [
    开头。在Objective-C中,这将作为NSArray返回,在Java中可能是ArrayList。不确定C的典型情况

    因此,数组中有元素,用逗号(
    )分隔。在一般情况下,这些元素可以是上述5种类型中的任何一种。下一个符号是
    {
    ,表示一个字典/对象。这是一个名称/值对的集合。在Objective-C中,它将是一个NSDictionary,在Java中可能是一个HashMap。然后您会看到名称/值对,每对中的两个部分由
    分隔:
    ,每对之间由
    分隔。
    第一部分是名称,始终用引号括起来第二部分是值,它可以是上述5种类型中的任何一种(请记住,数组元素是有序的,但“对象”中的名称/值对可以是任意顺序的——当JSON从一种形式转换为另一种形式时,顺序不会保留)

    在您的情况下,名字/值对是
    “category”:“防盗”
    。这意味着名为“category”的物品的值为“防盗”

    稍远一点,您会看到
    “location”:{“latitude”:“52.6361452”…
    。这意味着名称/值对的名称为“location”,值是另一个字典/对象。因此,当您从解析器的输出中获取值“location”时,您将获得字典/对象的语言表示形式

    请注意,这意味着,对于一般情况,在“剥洋葱皮”以获取所需数据项时,需要检查返回的对象类型


    但是一些JSON工具包提供了一种基于路径的机制来获取您想要的项目。例如,请求“0.location.latitude”或类似的内容,结果得到“52.6361452”。

    谢谢大家。我仍然不确定下一步该怎么做……我的代码有问题吗?谢谢大家。我仍然不确定下一步该怎么做……我的代码有问题吗?