【问题标题】:Web API C# - Returning full KVC JsonWeb API C# - 返回完整的 KVC Json
【发布时间】:2012-10-29 04:23:19
【问题描述】:

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

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

基本上 C# 返回类似:

格式化的原始数据 身体

[
{
 "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();            
    }

【问题讨论】:

    标签: c# json restkit asp.net-web-api


    【解决方案1】:

    我在尝试用 C# 序列化 JSON 时遇到了一些类似的问题。我认为最简单的方法是将客户包装在另一个类中。如果您只需要在一个地方进行序列化,您可以在调用序列化之前执行var temp = new Object { customer customer = new customer(); } 之类的操作。

    【讨论】:

    • 谢谢。为此,我必须更改 ApiController 方法的返回类型。我认为这在我的情况下不会奏效。我已经更新了问题以发布一些相关代码。再次感谢。
    • 这一行return db.Woms.AsEnumerable();返回顶部显示的json?我对此非常怀疑。发布的代码没有显示 json 的反序列化位置。这就是你将它包装在另一个对象中的地方。当然另一种方法是做json = @"{"customers":" + json + "}"(可能需要在内引号上转义)。一旦它是一个字符串,你可以在任何地方做。
    • 埃文,我已经更新了问题以包含我的网络服务结果的实际复制/粘贴。 json 序列化由 C# Web API 自动完成。应该有某种装饰器或设置以使其包含类名,但是,是的, AsEnumerable() 会导致 json 在顶部。问候。
    • 顺便说一句:这是 Web API 技术的示例:asp.net/web-api/overview/getting-started-with-aspnet-web-api/…。在我看来非常强大的东西。
    • 这种抽象相当令人印象深刻。我会早点把它包起来。创建一个包含一个成员的 Wom 类 - public wom woms; 这有点烦人,因为它需要你有更多的间接级别,但它可以工作,据我所知,这是让它工作的唯一方法。
    【解决方案2】:

    这是迄今为止我找到的最佳解决方案。基本上将 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() });
    }
    

    【讨论】:

      猜你喜欢
      • 2013-11-26
      • 2015-08-27
      • 2016-12-20
      • 1970-01-01
      • 2018-04-28
      • 2014-12-15
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多