反序列化 JSON (Json.NET)

Deserialize JSON (Json.NET)

我在 json 反序列化方面需要一点帮助。我是第一次使用Json,略知一二

我使用网络客户端得到以下字符串:

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

并尝试用

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

我的 class 看起来像这样:

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

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

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

感谢您的耐心等待和帮助!

您的数据是包含可为空整数的数组列表(从外观上看)

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

试试这个网站: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; }
}

有一些解决方案,C# 7.0 也支持 ValueTuple 例如这个例子。

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

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

假设它对你有帮助。