2010-10-27 229 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);