2014-02-12 3 views
0

Я пытаюсь разобрать json, начиная с тикета MtGox. http://data.mtgox.com/api/2/BTCUSD/money/tickerServiceStack.Text wrong Json Parsing

Я попытался сделать два пути с одинаковым результатом.

  1. JSONObject d1 = JsonSerializer.DeserializeString (downloadeddata)
  2. JSONObject d2 = JsonObject.Parse (downloadeddata)

Когда я пытаюсь получить доступ к d1 [ "данных"] это, как представляется, быть совершенным строка для десериализации =>

{ 
    [data, { 
      "high" : { 
       "value" : "600.00000", 
       "value_int" : "60000000", 
       "display" : "$600.00", 
       "display_short" : "$600.00", 
       "currency" : "USD" 
      }, 
      "low" : { 
       "value" : "515.00000", 
       "value_int" : "51500000", 
       "display" : "$515.00", 
       "display_short" : "$515.00", 
       "currency" : "USD" 
      }, 
      "avg" : { 
       "value" : "557.60317", 
       "value_int" : "55760317", 
       "display" : "$557.60", 
       "display_short" : "$557.60", 
       "currency" : "USD" 
      }, 
      "vwap" : { 
       "value" : "554.60404", 
       "value_int" : "55460404", 
       "display" : "$554.60", 
       "display_short" : "$554.60", 
       "currency" : "USD" 
      }, 
      "vol" : { 
       "value" : "20623.02466981", 
       "value_int" : "2062302466981", 
       "display" : "20,623.02\u00a0BTC", 
       "display_short" : "20,623.02\u00a0BTC", 
       "currency" : "BTC" 
      }, 
      "last_local" : { 
       "value" : "527.00000", 
       "value_int" : "52700000", 
       "display" : "$527.00", 
       "display_short" : "$527.00", 
       "currency" : "USD" 
      }, 
      "last_orig" : { 
       "value" : "527.00000", 
       "value_int" : "52700000", 
       "display" : "$527.00", 
       "display_short" : "$527.00", 
       "currency" : "USD" 
      }, 
      "last_all" : { 
       "value" : "527.00000", 
       "value_int" : "52700000", 
       "display" : "$527.00", 
       "display_short" : "$527.00", 
       "currency" : "USD" 
      }, 
      "last" : { 
       "value" : "527.00000", 
       "value_int" : "52700000", 
       "display" : "$527.00", 
       "display_short" : "$527.00", 
       "currency" : "USD" 
      }, 
      "buy" : { 
       "value" : "525.50002", 
       "value_int" : "52550002", 
       "display" : "$525.50", 
       "display_short" : "$525.50", 
       "currency" : "USD" 
      }, 
      "sell" : { 
       "value" : "526.99999", 
       "value_int" : "52699999", 
       "display" : "$527.00", 
       "display_short" : "$527.00", 
       "currency" : "USD" 
      }, 
      "item" : "BTC", 
      "now" : "1392201806575324" 
     } 
    ] 
} 

И когда я пытаюсь десериализации последней строки с любым из выше двух вариантов я получаю эту

JsonObject d3 = JsonObject.Parse(d1["data"]); 

Count = 5 
    [0]: {[high:{value:600.00000, value_int:60000000]} 
    [1]: {[display:$600.00, display_short:$600.00]} 
    [2]: {[currency:USD}, low:{value:515.00000]} 
    [3]: {[value_int:51500000, display:$515.00]} 
    [4]: {[display_short:$515.00, currency:USD]} 

, который далек от истины. И, по моему мнению, этот результат неправильный и даже не json parsable. => {[currency: USD}, low: {значение: 515.00000]}

MS Javascript сериализатор работает нормально.

Так что я делаю неправильно?

Thanks

+2

Все, кто работает на ту же тему? это третий вопрос, который я видел, пытаясь разобрать этот * тикер *. Есть ли способ отправить ответ на весь класс? – I4V

ответ

1

Как насчет десериализации для конкретных классов.

var ticker = ServiceStack.Text.JsonSerializer 
         .DeserializeFromString<Ticker.RootObject>(json); 

public class Ticker 
{ 
    public class Value 
    { 
     public string value { get; set; } 
     public string value_int { get; set; } 
     public string display { get; set; } 
     public string display_short { get; set; } 
     public string currency { get; set; } 
    } 

    public class Data 
    { 
     public Value high { get; set; } 
     public Value low { get; set; } 
     public Value avg { get; set; } 
     public Value vwap { get; set; } 
     public Value vol { get; set; } 
     public Value last_local { get; set; } 
     public Value last_orig { get; set; } 
     public Value last_all { get; set; } 
     public Value last { get; set; } 
     public Value buy { get; set; } 
     public Value sell { get; set; } 
     public string item { get; set; } 
     public string now { get; set; } 
    } 

    public class RootObject 
    { 
     public string result { get; set; } 
     public Data data { get; set; } 
    } 
} 
+0

Спасибо за ваш ответ. Я сделал это и на самом деле работает очень хорошо. Однако, если вы видите второй раздел кода в моем вопросе «Count = 5», и вы увидите, что он неправильно разбирает первый элемент «высокий» и анализирует только первый элемент. И это был мой вопрос. – ChristoD

+0

Я бы ожидал увидеть что-то вроде [0]: {[высокий: {}]} [1]: {[низкий: {}]} ... и т. Д. – ChristoD