0

Android アプリケーションから ApiController を呼び出そうとしています。これは API コントローラーです。

[AcceptVerbs("GET", "POST")]        
public string Get(string coords)      
{
  using (var context = new Entities())
  {
          var records = from poi in context.Pois
                     where poi.Latitude >= fromLatitude &&
                           poi.Latitude <= toLatitude &&
                           poi.Longitude >= fromLongitude &&
                           poi.Longitude <= toLongitude
                     select new
                     {
                         poiName = poi.Name,
                         poiLatitude = poi.Latitude,
                         poiLongitude = poi.Longitude
                     };

          return JsonConvert(records);
      }
  }
}

private string JsonConvert(object records)
{
    return Newtonsoft.Json.JsonConvert.SerializeObject(records,);
}

Android コードでは、新しい JSON(string) を使用して json 配列を作成しています。問題は、java が例外をスローすることです。json 文字列が無効です。デバッガーを見ると、文字列の前に 2 つのバックスラッシュがあり、Java はそれを解析する方法を知りません。

問題はどこだ?ありがとうございました

更新: 解決しました。WebApi は、json を文字列として XML を返しました。XMLを返すようにWebApiを変更し、オブジェクトを返すように変更し(そしてJSONConvertを削除しました)、動作します。

4

1 に答える 1

0

これは古い質問であることは知っていますが、同様の問題があり、解決策を見つけました。

私の場合、複雑な JSON オブジェクト (ネストされた) を .NET クライアントから Java Rest API に渡す必要があり、二重のバックスラッシュのために無効な JSON であることが判明した文字列パラメーターを使用していました (シリアル化したので、エスケープし、.NET は送信前に再度エスケープします)。

だから、それを避けるために私は StringContent を使用しました

MyType obj = new MyType()
{
...
};

string obJSON = JsonConvert.SerializeObject(obj);
StringContent sc = new StringContent(obJSON, Encoding.UTF8,"application/json");
HttpResponseMessage response = client.PostAsync(ruta, sc).Result;

これが誰かを助けることを願っています!

于 2016-07-18T16:38:11.973 に答える