如何忽略Json的数据合约?

时间:2013-05-20 20:21:20

标签: xml json asp.net-web-api datacontract

我正在使用asp.net web api并返回我的数据

return Request.CreateResponse<ResponseResult<ProductSearchDto>>(product.Status.Code, product);

当我使用fiddler向我展示xml(而不是向我显示json)时,这会返回令人讨厌且看起来很长的元素节点。

我现在通过将Data ContractsData Members添加到我的ResponseResult班级ProductSearchDto班级来解决此问题。

但是,当我想看看json看起来如何时,fiddler不再显示它,并说它不再有效json

我猜我的datacontracts不知何故搞砸了。

1 个答案:

答案 0 :(得分:0)

  

我猜不知道我的datacontracts搞砸了。

响应内容类型与任何DataContracts或其他任何东西都没什么关系。 ASP.NET Web API使用名为content negotiation的概念。这意味着如果客户端请求JSON,并且服务器支持JSON,那么他将返回JSON。相同对于XML和其他内容类型。因此,如果您希望服务器使用JSON,请确保客户端正在设置Accepts: application/json HTTP请求标头。

以下是有效请求的示例:

GET /api/values/123 HTTP/1.1
Host: example.com
Accept: application/json 
Connection: close

以及来自服务器的示例响应:

HTTP/1.1 200 OK
Content-Type: application/json
Content-Length: 13

{"foo":"bar"}

以下是样本控制器:

public class ValuesController: ApiController
{
    public HttpResponseMessage Get(string id)
    {
        return Request.CreateResponse(HttpStatusCode.OK, new { foo = "bar" });
    }
}