2013-02-03 95 views
0

我訪問它的格式返回JSON的API:Deserialise JSON與隨機密鑰

{"status":1,"complete":1,"list":{"293352541":{"item_id":"293352541","fave":"0"},"247320106":{"item_id":"247320106","fave":"0"},"291842735":{"item_id":"291842735","fave":"0"} ..... 

我遇到的問題是與的ITEM_ID標籤前的數量。它打破了我在反序列化中所做的任何嘗試,因爲我無法在我反序列化的對象中表示這個隨機整數。

我期望這個數字是例如單詞「Item」,因此它是表示封閉對象的關鍵字,但是具有這個數字意味着我不能製作JSon的對象表示。

所以

public class MyClass 
{ 
    public string status { get; set; } 
    public string complete { get; set; } 
    public List<MyObject> list { get; set; } 
} 

public class MyObject 
{ 
    public string item_id { get; set; } 
    public string fave { get; set; } 
} 

然後

var items = new JavaScriptSerializer().Deserialize<MyClass>(jsontext); 

dersialises,但items.list是空的。

此外,

dynamic result = JSon.Parse(jsontext); 

的作品,但我不能deserialise或訪問一個不錯的方式的項目清單。

有沒有辦法做到這一點?謝謝

+0

如果你不需要它可能會刪除字符串?刪除字符串,然後將json解析到你的類中。 – gideon

回答

1

因爲它不需要預定義類型進行反序列化,所以可以使用json.net(也可在nuget中使用)完成此操作。例如:

var jObj = JObject.Parse(data); 
var sense = jObj["list"] 
    .Select(x => (JProperty)x) 
    .Select(p => new { 
        propName = p.Name, 
        itemId = p.Value["item_id"], 
        fave = p.Value["fave"]});