2013-03-31 199 views
0

我有一個JSON字符串(根據驗證器)是有效的JSON,我堅持試圖解析它作爲對象在C#中。無法反序列化JSON

樣品字符串:

{"asks":[["49999.99000","20.00000000"],["900.00000","4.00000000"],["100.00000","5.00000000"]],"bids":[["5.40000","15.06500000"],["5.53675","0.50000000"],["5.00000","6.00000000"]]} 

我曾嘗試使用http://json2csharp.com/,它表明這個類(沒有工作):

public class RootObject 
{ 
    public List<List<string>> asks { get; set; } 
    public List<List<string>> bids { get; set; } 
} 

不過,我想分析它像List<Ask> asks { get; set; }。我曾嘗試以下:

public class Orderbook 
{ 
    public List<Ask> asks { get; set; } 
    public List<Bid> bids { get; set; } 
} 

public class Ask 
{ 
    public double amount { get; set; } 
    public double price { get; set; } 
} 

public class Bid 
{ 
    public double amount { get; set; } 
    public double price { get; set; } 
} 

但這種失敗類型「namespace.Ask」不支持數組的反序列化。

+0

是不是因爲你有字符串數組? – BlackBear

+1

這是因爲你試圖將數組反序列化爲對象。你的一個'ask'的JSON應該是'{「amount」:1231.321,「price」:3123.123}' –

+0

這是我所查詢的服務提供的格式。我希望能夠輕鬆地將其轉換/轉換爲我需要的格式。 – leepfrog

回答

1

無需AskBid

var orderBook = JsonConvert.DeserializeObject<Orderbook>(json); //Json.Net 
//OR 
var orderBook = new JavaScriptSerializer().Deserialize<Orderbook>(json); //JavaScriptSerializer 

public class Orderbook 
{ 
    public List<List<string>> asks { get; set; } 
    public List<List<string>> bids { get; set; } 
} 

順便說一句:值是字符串("49999.99000")不是雙

EDIT

asksbids是數組的陣列,所以將它們轉換爲一個數組concerete類(在反序列化過程中)需要很多技巧(如果可能的話)。你爲什麼不簡單地迭代orderBook來形成你想要的?

var asks = orderBook.asks.Select(a => 
         new Ask { 
          amount = double.Parse(a[0],CultureInfo.InvariantCulture), 
          price = double.Parse(a[1],CultureInfo.InvariantCulture) 
         }).ToList(); 
+0

感謝您指出顯而易見的東西(值是字符串),那是我忽略了的東西。 Unfortunateley我無法更改格式,因爲這是我正在使用的第三方輸出。所以我需要的是一種方法來將這些值轉換/加倍 - 這很容易嗎? Forthermore我想堅持'Ask'和'Bid',因爲這樣可以更容易地訪問這些屬性(比指定數組索引更好)。 – leepfrog

+0

感謝您的編輯。因爲我能以這種方式實現它,所以標記爲解決方案! – leepfrog