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)