如何反序列化JSON数据?

eit*_*ani 29 c# json json.net windows-phone-8 json-deserialization

我是使用JSON数据的新手.

我正在从Web服务中读取数据.发回的查询数据如下:

[["B02001_001E","NAME","state"],
 ["4712651","Alabama","01"],
 ["691189","Alaska","02"],
 ["6246816","Arizona","04"],
 ["18511620","Florida","12"],
 ["9468815","Georgia","13"],
 ["1333591","Hawaii","15"],
 ["1526797","Idaho","16"],
 ["3762322","Puerto Rico","72"]]
Run Code Online (Sandbox Code Playgroud)

有没有办法以这样的方式反序列化这些数据,即在没有我首先定义对象是什么的情况下生成基础对象?在上面的示例中,对象由第一行定义:

           ["B02001_001E","NAME","state"],
Run Code Online (Sandbox Code Playgroud)

通常,Web服务将返回格式化为二维JSON数组的查询数据,其中第一行提供列名,后续行提供数据值.

eva*_*nal 45

您可以非常轻松地反序列化.C#中的数据结构就是List<string[]>你可以做到的;

  List<string[]> data = JsonConvert.DeserializeObject<List<string[]>>(jsonString);
Run Code Online (Sandbox Code Playgroud)

上面的代码假设你正在使用json.NET.

编辑:注意json在技术上是一个字符串数组的数组.我更喜欢使用List<string[]>我自己的声明,因为它更直观.它不会给json.NET带来任何问题,如果你想让它成为一个字符串数组的数组,那么你需要将类型更改为(我认为)string[][]但是在C#中有一些有趣的小问题与锯齿状和2D数组一样我真的不知道所以我只是不打扰在这里处理它.


小智 32

如果你使用.Net 4.5,你也可以使用标准的.Net json序列化器:

using System.Runtime.Serialization.Json;
...    
Stream jsonSource = ...; // serializer will read data stream
var s = new DataContractJsonSerializer(typeof(string[][]));
var j = (string[][])s.ReadObject(jsonSource);
Run Code Online (Sandbox Code Playgroud)

在.Net 4.5及更早版本中,您可以使用JavaScriptSerializer类:

using System.Web.Script.Serialization;
...
JavaScriptSerializer serializer = new JavaScriptSerializer();
string[][] list = serializer.Deserialize<string[][]>(json);
Run Code Online (Sandbox Code Playgroud)