【发布时间】:2015-07-16 12:53:27
【问题描述】:
我创建了一个新的 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; }
}
}
现在,当我从浏览器发出请求时(标头设置为 Accept: application/json),我得到了这个 JSON:
[
120
]
但是当我将 DataMember Name 更改为其他任何内容时,即使是 [DataMember(Name = "Length")] 我得到正确的 JSON:
{
"Length" : 120
}
字符串“长度”是否被禁止或导致此行为的原因是什么?
顺便说一句。我将目标框架设置为 .NET Framework 4,但我也尝试过 .NET Framework 4.5.1,但问题仍然存在。
【问题讨论】:
-
WebAPI 使用 JSON.NET 作为默认的 JSON 序列化程序。如果您使用 JSON.NET 对其进行序列化,您能否使用已装饰的
ApiResponse模型重现该问题? -
只需使用
[JsonProperty(PropertyName="length")]代替DataContract和DataMember。 -
无法使用 Visual Studio 2013、.NET 4.5、Newtonsoft.Json 4.5.0.0 重现
-
我不会投票关闭它,因为它是插件中的一个错误。许多其他人很容易注意到同样的问题。
-
另外,如果您只想从 UpperCamelCase 转换为 lowerCamelCase,您可以使用 JSON.NET 设置一个本地方法,称为 CamelCasePropertyNamesContractResolver
标签: c# json asp.net-mvc-4