asp.net mvc api json包装器

asp.net mvc api json包装器,asp.net,asp.net-mvc,asp.net-mvc-4,asp.net-web-api,Asp.net,Asp.net Mvc,Asp.net Mvc 4,Asp.net Web Api,我有一个asp.net mvc api控制器方法,它的返回方法是列表。调用时,它返回以下json数据: [ { "AreaName": null, "AreaId": 0, "DestinationName": "Alanya", "DestinationId": 14, "CountryName": "Tyrkiet", "CountryId": 15 }, { "AreaName": null, "AreaId":

我有一个asp.net mvc api控制器方法,它的返回方法是列表。调用时,它返回以下json数据:

[
  {
    "AreaName": null,
    "AreaId": 0,
    "DestinationName": "Alanya",
    "DestinationId": 14,
    "CountryName": "Tyrkiet",
    "CountryId": 15
  },
  {
    "AreaName": null,
    "AreaId": 0,
    "DestinationName": "Antalya",
    "DestinationId": 113,
    "CountryName": "Tyrkiet",
    "CountryId": 15
  }
]
早些时候,当我在asp.net mvc中使用此方法时,它看起来类似于:

早期json数据:

{
    "ContentEncoding":{
    "IsSingleByte":true,
    "BodyName":"iso-8859-1",
    "EncodingName":"Western European (Windows)",
    "HeaderName":"Windows-1252",
    "WebName":"Windows- 1252",
    "WindowsCodePage":1252,
    "IsBrowserDisplay":true,
    "IsBrowserSave":true,
    "IsMailNewsDisplay":true,
    "IsMailNewsSave":true,
    "EncoderFallback":{
        "MaxCharCount":1
    },
    "DecoderFallback":{
        "MaxCharCount":1
    },
    "IsReadOnly":true,
    "CodePage":1252
},
"ContentType":"application/json;",
"Data":
然后,上面的列表将添加到数据包装器中


我的问题是-在使用asp.net mvc web api时,如何恢复此“包装器”格式?

您的JSON是对象列表的正常格式,第二种格式,较旧的表示对象。因此,当您需要时,只需返回对象。

可能在旧版本(普通mvc)中,您确实返回了如下内容:

return JsonResult(new { Data = myList });
return new { Data = myList };
public class InvoiceResult
{
    public int numberResultTotal;
    public int numberResultPaged;
    public List<InvoiceDTO> results;
}
<InvoiceResult>
<numberResultPaged>20</numberResultPaged>
<numberResultTotal>999999</numberResultTotal>
<results>
<InvoiceDTO>
<ID>110</ID>
<Active>2</Active>
<Date>01/01/2010</Date>
</InvoiceDTO>
<InvoiceDTO>...</InvoiceDTO>
<InvoiceDTO>...</InvoiceDTO>
<InvoiceDTO>...</InvoiceDTO>
</results>
</InvoiceResult>
现在,在WebApi中,您可以执行以下操作:

return myList;
这就解释了为什么旧的结果有那么多格式。要恢复WebApi中的旧包装,我想您只需执行以下操作:

return JsonResult(new { Data = myList });
return new { Data = myList };
public class InvoiceResult
{
    public int numberResultTotal;
    public int numberResultPaged;
    public List<InvoiceDTO> results;
}
<InvoiceResult>
<numberResultPaged>20</numberResultPaged>
<numberResultTotal>999999</numberResultTotal>
<results>
<InvoiceDTO>
<ID>110</ID>
<Active>2</Active>
<Date>01/01/2010</Date>
</InvoiceDTO>
<InvoiceDTO>...</InvoiceDTO>
<InvoiceDTO>...</InvoiceDTO>
<InvoiceDTO>...</InvoiceDTO>
</results>
</InvoiceResult>
如果上述操作不起作用,请尝试以下操作:

  • 将方法的返回类型更改为
    HttpResponseMessage

  • 使用以下命令:

    returnrequest.CreateResponse(HttpStatusCode.OK,new{Data=myList})

  • 我目前没有任何要调试的东西,但上面两个都应该可以工作。如果没有,可能是因为序列化反序列化不喜欢匿名对象(这可能会给XML带来比JSON更多的问题)


    无论如何,在我看来,使用对象的新版本要容易得多,主要是因为它周围没有(嘈杂的)包装:)

    您可以创建自己的返回类型,如下所示:

    return JsonResult(new { Data = myList });
    
    return new { Data = myList };
    
    public class InvoiceResult
    {
        public int numberResultTotal;
        public int numberResultPaged;
        public List<InvoiceDTO> results;
    }
    
    <InvoiceResult>
    <numberResultPaged>20</numberResultPaged>
    <numberResultTotal>999999</numberResultTotal>
    <results>
    <InvoiceDTO>
    <ID>110</ID>
    <Active>2</Active>
    <Date>01/01/2010</Date>
    </InvoiceDTO>
    <InvoiceDTO>...</InvoiceDTO>
    <InvoiceDTO>...</InvoiceDTO>
    <InvoiceDTO>...</InvoiceDTO>
    </results>
    </InvoiceResult>
    
    公共类InvoiceResult
    {
    公共国际号码查询总数;
    公共国际号码查询页面;
    公开名单结果;
    }
    
    ASP.NET Web API将其转换为JSON、XML或任何其他格式,您的客户端将得到如下结果:

    return JsonResult(new { Data = myList });
    
    return new { Data = myList };
    
    public class InvoiceResult
    {
        public int numberResultTotal;
        public int numberResultPaged;
        public List<InvoiceDTO> results;
    }
    
    <InvoiceResult>
    <numberResultPaged>20</numberResultPaged>
    <numberResultTotal>999999</numberResultTotal>
    <results>
    <InvoiceDTO>
    <ID>110</ID>
    <Active>2</Active>
    <Date>01/01/2010</Date>
    </InvoiceDTO>
    <InvoiceDTO>...</InvoiceDTO>
    <InvoiceDTO>...</InvoiceDTO>
    <InvoiceDTO>...</InvoiceDTO>
    </results>
    </InvoiceResult>
    
    
    20
    999999
    110
    2.
    01/01/2010
    ...
    ...
    ...
    
    只是好奇,当返回的对象已经是有效的json时,为什么需要它?