Как мне разобрать этот json-ответ? - PullRequest
1 голос
/ 02 июня 2011

Ответ структурирован так, это выдержка, может отсутствовать фигурная скобка:

{"2":{"date":1306411951,"price":4.8003,"low":"4.80000000","high":"4.80060000","nicedate":"15:12"},"6":{"date":1306418941,"price":4.654175,"low":"4.40000000","high":"4.80000000","nicedate":"17:02"}

И я получаю исключения приведения при синтаксическом анализе строки ответа, даже если все элементы данных в объектестроки.

Я использую System.Runtime.Serialization.Json для десериализации объектов.

Сейчас я делаю это так:

        Currency[] MapJSONToObjects(string jsonString)
    {
        using (var ms = new MemoryStream(Encoding.Unicode.GetBytes(jsonString)))
        {
            //Parse
            var ser = new DataContractJsonSerializer(typeof(Currency[]));
            Currency[] currencies = (Currency[])ser.ReadObject(ms);
            return currencies;
        }
    }

1 Ответ

2 голосов
/ 02 июня 2011

Как уже упоминалось, вам не хватает конечного } из JSON. Предполагая, что то, что вы получаете, правильно отформатировано и соответствует JSON, тогда ваш класс Currency должен выглядеть примерно так:

[DataContract]
public class Currency
{
    [DataMember(Name = "date")]
    public int Date { get; set; }
    [DataMember(Name = "price")]
    public double Price { get; set; }
    [DataMember(Name = "low")]
    public string Low { get; set; }
    [DataMember(Name = "high")]
    public string High { get; set; }
    [DataMember(Name = "nicedate")]
    public string NiceDate { get; set; }
}

Ваш код десериализации выглядит нормально, хотя вы можете рассмотреть возможность использования JSON.NET, если у вас все еще есть проблемы, как описано здесь: Десериализация переменной Тип массива JSON с использованием DataContractJsonSerializer

...