2

我有一个 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);

whereSubmissionDataRow只是一个类,每个读数都有一个属性,但反序列化器不知道在哪个属性中放入什么值!

4

2 回答 2

0

回到我的 .NET 时代,我使用的是Jayrock,它的工作原理非常棒。

于 2010-10-27T01:06:44.787 回答
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);

如果您希望使用问题中提到的强类型类,则可以使用 aJsonConverter来填充它。

像这样定义你的类:

[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);
于 2014-07-04T23:04:00.290 回答