Ответ Json на сопоставление классов, десериализация Restsharp

Я использую RestSharp для использования спокойного веб-сервиса. Я использую встроенный Json Deserializer для десериализации ответа. Это ответ.

[{"id":"1","latitude":"18.0155848","longitude":"-77.4988293","rating":"1","streetid":"1","username":"joel","verified":"1"},{"id":"2","latitude":"18.0155892","longitude":"-77.498774","rating":"1","streetid":"2","username":"joel","verified":"0"},{"id":"3","latitude":"18.0227736","longitude":"-77.4980039","rating":"1","streetid":"3","username":"joel","verified":"0"}]

Это модели, на которые он сопоставляется.

List<Pothole> list = new List<Pothole>();

 public class Pothole
 {
    //getters and setters for the attributes of Pothole Model
    public long Id { get; set;}
    public double Latitude { get; set; }
    public double Longitude { get; set; }
    public double Rating{ get;set;}
    public long StreetId { get; set; }
    public string Username { get; set; }
    public bool Verified { get; set; }
}

Однако, когда я делаю вызов, данные не десериализуются. Мне интересно, есть ли проблема с ответом json на сопоставление классов. Я сопоставляю ответ со списком выбоин из-за возвращаемого массива объектов выбоин. Я проверяю код состояния HTTP и содержимое ответа, поэтому данные возвращаются, проблема возникает только из-за десериализации.


person Joel Dean    schedule 06.03.2013    source источник
comment
Я предполагаю, что у вас есть проблема с разницей в случае между JSON и классом, на который вы сопоставляете...   -  person Paul Sasik    schedule 06.03.2013
comment
@SteveWellens обновлено   -  person Joel Dean    schedule 06.03.2013
comment
@PaulSasik Да, вот с чем у меня проблема.   -  person Joel Dean    schedule 06.03.2013
comment
модели/классы точны?   -  person Joel Dean    schedule 06.03.2013
comment
Вы должны соответствовать регистру переменных JSON. идентификатор вместо идентификатора и т. д.   -  person Paul Sasik    schedule 06.03.2013


Ответы (3)


Попробуй это:

public class Pothole
{
    public string id { get; set; }
    public string latitude { get; set; }
    public string longitude { get; set; }
    public string rating { get; set; }
    public string streetid { get; set; }
    public string username { get; set; }
    public string verified { get; set; }
}

C# чувствителен к регистру, поэтому отражение, происходящее при заполнении объекта C#, будет искать свойства с именами, ТОЧНО похожими на имена в строке JSON.

Кроме того, если вы используете Visual Studio 2012 SP 1, вы можете вставлять текст JSON как класс C#. Довольно удобно.

person Paul Sasik    schedule 06.03.2013
comment
RestSharp нечувствителен к регистру, то есть он будет десериализоваться независимо от регистра, что является его самым большим преимуществом. - person Toni Petrina; 06.03.2013
comment
Есть ли способ указать, как он десериализуется? Я не хочу следовать соглашению о строчных буквах JSON в моем объекте С#. - person The Muffin Man; 28.06.2013
comment
@Nick: Ты спрашиваешь Тони или меня? If me: нет, не в текущей версии, if Toni: взгляните на библиотеку RestSharp, чтобы узнать, можно ли ее настроить - person Paul Sasik; 28.06.2013

Или вы также можете использовать: Json2Csharp

generate c# classes from json
person Adnane    schedule 22.07.2013

Опоздал на вечеринку, но я решил добавить свои 0,02 доллара. Я использую немодифицированную версию RestSharp.Portable 1.6.2 Xamarin PCL.

У меня есть json следующим образом:

{"blah":{"iPAddress":"10.1.1.x","cPU":"1 vCPU","dNSName":"blah.blah.com"}}

с классом ниже десериализация не работает для ЦП, хотя работает для DSName и IPAddress.

public class Blah
{
    public string CPU { get; set; }
    public string DNSName { get; set; }
    public string IPAddress { get; set; }
}

Однако, если я меняю процессор на процессор, он работает нормально.

public class Blah
{
    public string cPU { get; set; }
    public string DNSName { get; set; }
    public string IPAddress { get; set; }
}

Итак, похоже на ошибку, просто хотел внести свой вклад.

person Mark Erickson    schedule 07.08.2014
comment
Я ожидаю, что вам нужен правильный регистр для всех ваших свойств, а не только для процессора? - person Myster; 08.05.2015