【问题标题】:Json response to class mapping Restsharp deserializingJson对类映射Restsharp反序列化的响应
【发布时间】:2013-03-06 02:34:37
【问题描述】:

我正在使用 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 状态代码和响应的内容,以便返回数据,它只是反序列化导致了问题。

【问题讨论】:

  • 我猜您对 JSON 和您要映射到的类之间的大小写差异有疑问...
  • @SteveWellens 更新
  • @PaulSasik 是的,这就是我遇到的问题。
  • 模型/类是否准确?
  • 你需要匹配JSON变量的大小写。 id 而不是 Id 等。

标签: c# json windows-phone-7 deserialization restsharp


【解决方案1】:

试试这个:

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# 类。很方便。

【讨论】:

  • RestSharp 不区分大小写,即不管大小写都会反序列化,这是它最大的优势。
  • 有没有指定它如何反序列化?我不想在我的 C# 对象中遵循 JSON 的小写约定。
  • @Nick:你问的是托尼还是我? If me: 不,不是当前的风格,if Toni: 看看 RestSharp 库是否可配置
【解决方案2】:

或者你也可以使用:Json2Csharp

generate c# classes from json

【讨论】:

    【解决方案3】:

    聚会迟到了,但我想我会投入 0.02 美元。我正在使用未经修改的 RestSharp.Portable 1.6.2 Xamarin PCL

    我的json如下:

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

    使用下面的类,反序列化不适用于 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; }
    }
    

    所以,感觉就像一个错误,只是想贡献一下。

    【讨论】:

    • 我希望您的所有属性都需要正确的大小写,而不仅仅是 CPU?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-08
    • 1970-01-01
    相关资源
    最近更新 更多