如果要使用JSON样式小写名称从Web Api中的操作方法返回对象,是否有一种方法可以对属性名称进行别名,以便下面的C#对象看起来像后面的JSON对象.
C#响应模型
public class Account
{
public int Id { get; set; }
public string AccountName { get; set; }
public decimal AccountBalance { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
JSON,我想退回
{
"id" : 12,
"account-name" : "Primary Checking",
"account-balance" : 1000
}
Run Code Online (Sandbox Code Playgroud)
Fil*_*p W 52
你可以使用JSON.NET JsonProperty
public class Account
{
[JsonProperty(PropertyName="id")]
public int Id { get; set; }
[JsonProperty(PropertyName="account-name")]
public string AccountName { get; set; }
[JsonProperty(PropertyName="account-balance")]
public decimal AccountBalance { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这只适用于JSON.NET - 显然.如果您想要更加不可知,并且让这种类型的命名能够用于其他可能的格式化程序(即您将JSON.NET更改为其他内容,或者用于XML序列化),请参考System.Runtime.Serialization和使用:
[DataContract]
public class Account
{
[DataMember(Name="id")]
public int Id { get; set; }
[DataMember(Name="account-name")]
public string AccountName { get; set; }
[DataMember(Name="account-balance")]
public decimal AccountBalance { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Rya*_*ice 19
如果您需要对序列化进行精细控制,那么上面的Filip答案非常好,但是如果您想进行全局更改,可以使用如下所示的单线程来完成.
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new StringEnumConverter());
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver =
new CamelCasePropertyNamesContractResolver(); // This line will cause camel casing to happen by default.
}
}
Run Code Online (Sandbox Code Playgroud)
编辑 根据下面的评论,我在这里添加了一篇博文,其中包含完整的解决方案:http://www.ryanvice.net/uncategorized/extending-json-net-to-serialize-json-properties-using-a-格式-即-被分隔逐破折号和-全小写/
| 归档时间: |
|
| 查看次数: |
15499 次 |
| 最近记录: |