Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net web api 有没有办法在ASP.NETWebAPI中别名响应模型属性_Asp.net Web Api - Fatal编程技术网

Asp.net web api 有没有办法在ASP.NETWebAPI中别名响应模型属性

Asp.net web api 有没有办法在ASP.NETWebAPI中别名响应模型属性,asp.net-web-api,Asp.net Web Api,如果您想从Web Api中的action方法返回具有JSON样式小写名称的对象,是否有一种方法可以对属性名称进行别名,以便下面的C#对象看起来像后面的JSON对象 C#响应模型 公共类帐户 { 公共int Id{get;set;} 公共字符串AccountName{get;set;} 公共十进制帐户余额{get;set;} } 我希望返回的JSON { "id" : 12, "account-name" : "Primary Checking",

如果您想从Web Api中的action方法返回具有JSON样式小写名称的对象,是否有一种方法可以对属性名称进行别名,以便下面的C#对象看起来像后面的JSON对象

C#响应模型

公共类帐户
{
公共int Id{get;set;}
公共字符串AccountName{get;set;}
公共十进制帐户余额{get;set;}
}
我希望返回的JSON

    {
        "id" : 12,
        "account-name" : "Primary Checking",
        "account-balance" : 1000
    }

您可以使用JSON.NET的
JsonProperty

公共类帐户
{
[JsonProperty(PropertyName=“id”)]
公共int Id{get;set;}
[JsonProperty(PropertyName=“帐户名”)]
公共字符串AccountName{get;set;}
[JsonProperty(PropertyName=“账户余额”)]
公共十进制帐户余额{get;set;}
}
显然,这只适用于JSON.NET。如果您希望更加不可知,并且这种类型的命名能够用于其他潜在的格式化程序(即,您将JSON.NET更改为其他格式,或用于XML序列化),请参考
System.Runtime.serialization
,并使用:

[DataContract]
公共类帐户
{
[数据成员(Name=“id”)]
公共int Id{get;set;}
[DataMember(Name=“账户名称”)]
公共字符串AccountName{get;set;}
[DataMember(Name=“账户余额”)]
公共十进制帐户余额{get;set;}
}

如果您需要对序列化进行粒度控制,那么上面的Filip的答案非常好,但是如果您想进行全局更改,可以使用如下所示的一行程序

公共静态类WebApiConfig
{
公共静态无效寄存器(HttpConfiguration配置)
{
config.Routes.MapHttpRoute(
名称:“DefaultApi”,
routeTemplate:“api/{controller}/{id}”,
默认值:新建{id=RouteParameter.Optional}
);
config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(新的StringEnumConverter());
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver=
new CamelCasePropertyNamesContractResolver();//默认情况下,此行将导致使用CamelCase。
}
}

编辑
根据下面的评论,我在这里添加了一篇博客文章,其中包含完整的解决方案:

虽然这是一个好主意,显然比定义所有这些属性更容易,但这并不是OP所要求的。它不能解决破折号问题。@Ryan您的链接不起作用,现在它位于此处:对于此解决方案的用户,请注意,将
[DataContract]
应用于类需要在所有要序列化的属性上使用
[DataMember]
属性。也就是说,如果您从一个具有10个默认情况下当前序列化的属性的类开始,并将
[DataContract]
添加到该类中,并将
[DataMember(Name=“a-new-Name”)]
添加到该属性中,则其他9个属性将不再序列化。您如何更改模型名称(此处为帐户)?