2013-05-10 116 views
0

我怎样才能反序列化以下JSON到定制对象使用C#和Json.NET:如何使用Json.NET和C#反序列化包含一个包含数组数组的对象的JSON数组?

[ { 
    'data': [ 
     [ '100473','3481282801.0' ], 
     [ '100472','3481275600.0' ], 
     [ '100471','3481273800.0' ], 
     [ '100470','3481263900.0' ], 
     [ '100469','3481263000.0' ] 
    ], 
    'error': '', 
    'statement_time': 0.00440700000000000030, 
    'total_time': 0.00475200000000000010 
} ] 

它是包含单一对象的阵列。为了使事情更有趣,该对象包含一组数组。 (不幸的是,我无法控制格式。)我对JSON比较陌生,以为我会尝试Json.NET。如果能让事情变得更简单,我可以接受其他JSON框架。

回答

4

使用Json.Net

var result = JsonConvert.DeserializeObject<List<MyObject>>(str); 

public class MyObject 
{ 
    public List<List<string>> data { get; set; } 
    public string error { get; set; } 
    public double statement_time { get; set; } 
    public double total_time { get; set; } 
} 
+0

这是我第一次尝试,但它给了我以下错误信息:无法反序列化当前的JSON数组(例如, [1,2,3])类型为'Target',因为类型需要JSON对象(例如{“name”:“value”})才能正确反序列化。 要修复此错误,请将JSON更改为JSON对象(例如{“name”:“value”})或将反序列化类型更改为实现集合接口(例如ICollection,IList)的数组或类型,如列表可以从JSON数组中反序列化。 JsonArrayAttribute也可以添加到类型中,以强制它从JSON数组反序列化。 – Ryan 2013-05-13 13:13:45

+0

在尝试反序列化对象之前,我以编程方式从开始和结束(外部数组)删除了方括号。它现在正在工作,但这是做到这一点的最佳方式吗?我不知道为什么我要查询的系统返回数组中的对象。我认为这种格式没有任何优势。 – Ryan 2013-05-13 13:22:59

+0

@Ryan鉴于你的json有问题,上面的代码完美运行。 (我在写这篇评论前再次测试过) – I4V 2013-05-13 13:24:51

0

如果您正在使用C#4.0或更高版本,可以使用动态对象:

dynamic json = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonstring); 

然后你可以使用点符号这样的访问JSON的成员:

string s = json[0].data[0][0][1]; 

例如,这将返回您的编号100473.

+0

我知道,它应该只是说明使用这种方式,你会从JSON对象中获得这个数字。 – filipko 2013-05-10 22:00:02

相关问题