0

I am tryng to parse a json comming from MtGox ticker. http://data.mtgox.com/api/2/BTCUSD/money/ticker

I have attempted two ways with same result.

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

When I try to access the d1["data"] it appears to be perfect string for deserialization =>

{
    [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"
        }
    ]
}

And the when I try to deserialize the latter string with either of above two options i get this

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]}

which is far from the truth. And according to me this result is wrong and even not json parsable. => {[currency:USD}, low:{value:515.00000]}

MS Javascript serializer is working ok.

So what am I doing wrong?

Thanks

ChristoD
  • 121
  • 1
  • 7
  • 2
    Everyone working on the same topic? this is the third question I saw trying to parse that *ticker*. Is there a way to send the answer to whole class? – I4V Feb 12 '14 at 12:10

1 Answers1

1

How about deserializing to concrete classes.

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; }
    }
}
Sergey Berezovskiy
  • 232,247
  • 41
  • 429
  • 459
EZI
  • 15,209
  • 2
  • 27
  • 33
  • Thanks for your answer. I have made that and it actually works very much fine. However if you see the second code section in my question "Count = 5" and down you will see that it is parsing incorrectly the first element "high" and it is parsing only first element. And this was my question. – ChristoD Feb 12 '14 at 15:27
  • I would expect to see something like [0]: {[high:{}]} [1]: {[low:{}]} ...etc. – ChristoD Feb 12 '14 at 15:28