2013-03-06 3 views
2

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

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

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

+0

Я предполагаю, что у вас есть проблема с разницей между JSON и классом, на который вы картируете ... –

+0

@SteveWellens updated –

+0

@PaulSasik Да, это то, с чем я столкнулся. –

ответ

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#. Довольно удобно.

+0

Большое спасибо Пол, это хорошо работает. –

+1

RestSharp не чувствителен к регистру, т. Е. Будет десериализоваться независимо от случая, то есть его самым большим преимуществом. –

+0

Есть ли способ указать, как он десериализуется? Я не хочу следовать нижестоящему соглашению JSON в моем объекте C#. –

0

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

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

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

с ниже классом, deserialzation не работает процессор, работает DSName, и IPAddress, хотя.

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

Однако, если я изменю CPU на cPU, он отлично работает.

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

Таким образом, он чувствует себя как ошибка, просто хотел внести свой вклад.

+0

Я бы ожидал, что вам нужен правильный случай для всех ваших свойств, а не только для cPU? – Myster

Смежные вопросы