1

iOS アプリから RestKit を使用して、C# .Net 4 で構築している Web API サービスに接続しています。

私はここから同じ問題を抱えています: RestKit非kvcオブジェクトマッピング

基本的に、C# は次のようなものを返します。

フォーマットされた生の BODY

[
{
 "Id":6,
 "Guid":"00000000-0000-0000-0000-000000000000",
 "Owner":null,
 "Message":"Testing Wom#10",
 "HashTags":null,
 "createdtime":"2012-10-28T00:00:00",
 "PlayedCount":100,
 "DurationInSecs":150.0,
 "FileSizeInBytes":20000,
 "FileUrl":"http://www.wom.com"
}
]

RestKit が期待する標準フォーマットは

{"woms": [
{
 "Id":6,
 "Guid":"00000000-0000-0000-0000-000000000000",
 "Owner":null,
 "Message":"Testing Wom#10",
 "HashTags":null,
 "createdtime":"2012-10-28T00:00:00",
 "PlayedCount":100,
 "DurationInSecs":150.0,
 "FileSizeInBytes":20000,
 "FileUrl":"http://www.wom.com"
}
]

方法はどうでもいいのですが、iOS 側からすれば、C# に "customers" クラス名を返させる方が簡単なようです。

それを返すようにC#に指示するにはどうすればよいですか?

ありがとう。

これは、C# の ApiController の現在のコードです。

namespace WomWeb.Controllers.Apis
{
[Authorize]
public class WomsController : ApiController
{
    private WomContext db = new WomContext();

    // GET api/Woms
    public IEnumerable<Wom> GetWoms()
    {
        return db.Woms.AsEnumerable();            
    }
4

2 に答える 2

1

C# で JSON をシリアル化しようとすると、このような問題が発生しました。最も簡単な方法は、顧客を別のクラスにラップすることだと思います。1 つの場所でのみシリアル化する必要がある場合は、var temp = new Object { customer customer = new customer(); }シリアル化する呼び出しを行う直前に次のようなことを行うことができます。

于 2012-10-29T04:31:28.157 に答える
0

これは私がこれまでに見つけた最良の解決策です。基本的に、IEnumerable を HttpResponseMessage に置き換え、Request.CreateResponse を使用して応答します (以下のコード)。

機能しますが、理想的とは言えません。抽象化を失い、リクエストヘッダーに関係なくコントローラーが Json で応答するようになりました (ロジックは自動的に解決されましたが、CreateResponse を使用すると、出力に直接書き込みます)。

// GET api/Woms           
//public IEnumerable<Wom> GetWoms()
public HttpResponseMessage GetWoms()
{
  //return  db.Woms.Include("Owner").AsEnumerable(); 
  return Request.CreateResponse(HttpStatusCode.OK, new { woms = Include("Owner").AsEnumerable() });
}
于 2012-11-01T03:03:27.777 に答える