4

RestSharpを使用して安らかなWebサービスを利用しています。組み込みのJsonDeserializerを使用して、応答を逆シリアル化します。これが応答です。

[{"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ステータスコードと応答の内容をチェックして、データが返されるようにします。逆シリアル化するだけで問題が発生します。

4

3 に答える 3

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#クラスとして貼り付けることができます。かなり便利です。

于 2013-03-06T03:55:52.047 に答える
1

または、次を使用することもできます:Json2Csharp

generate c# classes from json
于 2013-07-22T13:17:00.717 に答える
0

パーティーに遅れましたが、私は自分の$0.02を投入すると思いました。変更されていないバージョンのRestSharp.Portable1.6.2XamarinPCLを使用しています

私は次のように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; }
}

だから、バグのように感じ、ただ貢献したかっただけです。

于 2014-08-07T18:55:22.813 に答える