2017-09-06 160 views
2

我需要一點幫助json反序列化。這是我第一次使用Json,所以我對它有一點點了解。反序列化JSON(Json.NET)

我使用的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;} 
} 

如何需要設計我的類來獲取某種集合中的數據值,以便每個條目包含兩個值insid e支架?

Thx爲您的耐心和幫助!

回答

9

你的數據是一個包含可空整數(通過它的外觀)陣列的列表

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

這看起來很有希望,但我得到了JsonSerializationException(「無法反序列化當前JSON數組[...],因爲該類型需要JSON對象正確地反序列化。」) –

+1

@ErikT。看起來你已經從包含這個char('...')的控制檯複製了一些JSON字符串,而不是真正的實際JSON文本。看到這個活的例子,它沒有這個字符工作:http://rextester.com/ESC67816 – Jamiec

+0

愚蠢的我使用 insead的<列表>。它現在工作正常。謝謝! –

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; } 
} 
+0

謝謝你的網站推薦。看起來很有用,特別是對於較大的字符串。 –

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,所以可以假設你使用的值的元組。

假設它對你有幫助。