c# – 当DataMember的名称为“length”时,为什么我的整个对象被序列化为Array

我创建了一个新的ASP.NET MVC 4 Web应用程序并修改了默认的ValuesController,如下所示:

using System.Runtime.Serialization;
using System.Web.Http;

namespace WebSerializationTest.Controllers
{
    public class ValuesController : ApiController
    {
        // GET api/values
        public ApiResponse Get()
        {
            ApiResponse res = new ApiResponse();
            res.Length = 120;
            return res;
        }
    }

    [DataContract]
    public class ApiResponse
    {
        [DataMember(Name = "length")]
        public int Length { get; set; }
    }
}

现在,当我从浏览器执行请求时(Headers设置为Accept:application / json),我得到了这个JSON:

[
    120
]

但是,当我将DataMember名称更改为其他任何名称时,甚至[DataMember(Name =“Length”)]
我得到了正确的JSON:

{
    "Length" : 120
}

Is the string “length” forbidden or what is causing this behaviour?

顺便说一句.我将目标框架设置为.NET Framework 4,但我也尝试过.NET Framework 4.5.1,问题仍然存在.

最佳答案 事实证明,这是我使用的Firefox插件中的一个名为RESTClient的错误.

在Response Body(突出显示)选项卡中,JSON呈现不正确,但在Response Body(Raw)选项卡中,JSON是正确的.

我还发现它是一个known bug,自2012年以来一直没有修复.

点赞