反序列化JSON(Json.NET)

时间:2017-09-06 09:26:49

标签: c# json json-deserialization

我需要一些json反序列化的帮助。这是我第一次使用Json,所以我对它有一点了解。

我使用webclient获取以下字符串:

[{"name": "somename", "data": [[72, 1504601220], [null, 1504601280], ..., [125, 1504605840]]}]

并尝试使用

序列化它
JsonConvert.DeserializeObject<TestObject>(jsonstring)

我的班级看起来像这样:

public class TestObject
{
    [JsonProperty(PropertyName = "name")]
    public string TargetName { get; set; }

    [JsonProperty(PropertyName = "data"]
    public List<?????> DataPoints {get; set;}
}

我如何设计我的类以获取某种集合中的数据值,以便每个条目包含括号内的两个值?

感谢您的耐心和帮助!

3 个答案:

答案 0 :(得分:9)

您的数据是包含可空整数的数组列表(通过它的外观)

[JsonProperty(PropertyName = "data"]
public List<int?[]> DataPoints {get; set;}

答案 1 :(得分:2)

试试这个网站:http://json2csharp.com/ 如果您只有简单的JSON文本,这个网站可以节省您的大量时间。它可以帮助您将其转换为C#对象,但您仍需要仔细检查它。

var data = "[{\"name\": \"somename\", \"data\": [[72, 1504601220], [null, 1504601280], [125, 1504605840]]}]";
var obj = JsonConvert.DeserializeObject<List<TestObject>>(data);

public class TestObject
{
    [JsonProperty(PropertyName = "name")]
    public string TargetName { get; set; }
    [JsonProperty(PropertyName = "data")]
    public List<int?[]> DataPoints { get; set; }
}

答案 2 :(得分:0)

对此有一些解决方案,C#7.0还支持 ValueTuple ,例如此示例。

List<(int? ,int?)> DataPoints { get; set; }
// if it not work try this.
List<List<int?>> DataPoints { get; set; }

如果你的json内部数组元素数等于2,那么可以假设你使用值元组。

假设它对你有帮助。