C# 读取json字符串
有人能帮我把下面的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 },... 我创建了一个类,包含每种
[ { "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的读取都是相同的。区别在于它创建的对象 基本上有五个:
[
开头。在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读取的内容是相同的,而不管您使用的是什么计算语言。区别在于它创建的对象 基本上有五个:
[
开头。在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”。谢谢大家。我仍然不确定下一步该怎么做……我的代码有问题吗?谢谢大家。我仍然不确定下一步该怎么做……我的代码有问题吗?