2010-10-27 129 views
1

我有值的2维阵列中的JSON格式:反序列化JSON值的2维阵列

[[57, 2], [57, 2], [58, 2], [55, 2], [60, 2], [54, 1], [59, 11]] 

每个对实际包含一对无关的读数,并有一对每分钟。所以在第一分钟,阅读1是57和阅读2是2。在第二分钟,读数是相同的,等等。

现在,我想将它转换成我可以在.Net中使用的格式来绘制每个读数。这可以是两个并行数组,一个用于读取第一个值,每个分钟读取一个元素,另一个读取第二个数值。或者,如果这更容易,它可能是一个二维数组。

我尝试使用DataContractJSONSerializer没有任何的运气:

IEnumerable<SubmissionDataRow> obj = (IEnumerable<SubmissionDataRow>)ser.ReadObject(reader, false); 

其中SubmissionDataRow仅仅是一个属性类各自的读数,但解串器不知道该放在哪个属性什么价值!

回答

0

回到我的.NET日子里,我使用的是Jayrock,它像一个魅力一样工作。

0

您可以使用Json.Net以几种方式完成此操作。如果你不介意与数字的二维数组的工作,你可以简单地反序列化到一个int[][]

string json = "[[57, 2], [57, 2], [58, 2], [55, 2], [60, 2], [54, 1], [59, 11]]"; 

int[][] values = JsonConvert.DeserializeObject<int[][]>(json); 

如果您愿意,你在你的问题中提到了强类型类的工作,您可以使用JsonConverter来填充它。

定义类这样的:

[JsonConverter(typeof(SubmissionDataRowConverter))] 
class SubmissionDataRow 
{ 
    public int Reading1 { get; set; } 
    public int Reading2 { get; set; } 
} 

而且这样的转换器:

class SubmissionDataRowConverter : JsonConverter 
{ 
    public override bool CanConvert(Type objectType) 
    { 
     return (objectType == typeof(SubmissionDataRow)); 
    } 

    public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) 
    { 
     JArray array = JArray.Load(reader); 
     return new SubmissionDataRow 
     { 
      Reading1 = array[0].Value<int>(), 
      Reading2 = array[1].Value<int>() 
     }; 
    } 

    public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 
    { 
     throw new NotImplementedException(); 
    } 
} 

然后你就可以反序列化这样的:

List<SubmissionDataRow> rows = 
      JsonConvert.DeserializeObject<List<SubmissionDataRow>>(json);