我有一个JSON格式的二维数组:
[[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 :(得分:0)
回到我的.NET时代,我正在使用Jayrock,它的工作就像一个魅力。
答案 1 :(得分: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);