1

我正在使用 iOS 应用程序中的 RestKit 连接到我们在 C# .Net 4 中构建的 Web API 服务。

我在这里遇到了同样的问题:RestKit non-kvc object mapping

基本上 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# 返回“客户”类名似乎更容易。

我怎样才能告诉 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 时,我遇到了一些类似的问题。我认为最简单的方法是将客户包装在另一个类中。如果您只需要在一个地方进行序列化,您可以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 回答