2013-03-06 54 views
2

我正在使用RestSharp来使用restful web服务。我正在使用内置的Json解串器来反序列化响应。 这是回应。Json响应类映射Restharp反序列化

[{"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和你正在映射的类之间的情况的差异问题... – 2013-03-06 02:36:58

+0

@SteveWellens更新 – 2013-03-06 02:39:10

+0

@PaulSasik是的,这就是我有一个问题。 – 2013-03-06 02:39:50

回答

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

非常感谢Paul,这工作得很好。 – 2013-03-06 04:05:58

+1

RestSharp不区分大小写,即无论情况如何,它都将反序列化,这是它的最大优点。 – 2013-03-06 06:57:22

+0

无论如何要指定它如何反序列化?我不想在我的C#对象中遵循JSON的小写约定。 – 2013-06-28 02:17:41

0

迟到了,但我想我会在我的$ 0.02扔掉。我使用RestSharp.Portable 1.6.2 Xamarin PCL

的未修改版本我有JSON如下:

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

与下面的类中,deserialzation不适用于CPU工作,适用于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; } 
} 

所以,感觉就像一个bug,只是想贡献。

+0

我希望你需要正确的情况下所有的属性,而不仅仅是cPU? – Myster 2015-05-07 21:28:18