2016-04-27 85 views
5

我有LoginModel:返回JSON與屬性名稱的小寫首字母

public class LoginModel : IData 
{ 
    public string Email { get; set; } 
    public string Password { get; set; } 
} 

,我必須在Web API方法

public IHttpActionResult Login([FromBody] LoginModel model) 
{ 
    return this.Ok(model); 
} 

而且它的返回200和身體:

{ 
    Email: "dfdf", 
    Password: "dsfsdf" 
} 

但我想得到較低的第一個字母在財產如

{ 
    email: "dfdf", 
    password: "dsfsdf" 
} 

而且我有修正

public class FirstLowerContractResolver : DefaultContractResolver 
{ 
    protected override string ResolvePropertyName(string propertyName) 
    { 
     if (string.IsNullOrWhiteSpace(propertyName)) 
      return string.Empty; 

     return $"{char.ToLower(propertyName[0])}{propertyName.Substring(1)}"; 
    } 
} 

如何申請此JSON解析器合同?

+0

這項工作? http://tostring.it/2012/07/18/customize-json-result-in-web-api/ –

回答

7

要強制將所有從api返回的json數據轉換爲camel案例,使用Newtonsoft Json與默認camel案例合約解析器更容易。

像這樣創建一個類:

using Newtonsoft.Json.Serialization; 

internal class JsonContentNegotiator : IContentNegotiator 
{ 
    private readonly JsonMediaTypeFormatter _jsonFormatter; 

    public JsonContentNegotiator(JsonMediaTypeFormatter formatter) 
    { 
     _jsonFormatter = formatter;   
     _jsonFormatter.SerializerSettings.ContractResolver = 
      new CamelCasePropertyNamesContractResolver(); 
    } 

    public ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable<MediaTypeFormatter> formatters) 
    { 
     return new ContentNegotiationResult(_jsonFormatter, new MediaTypeHeaderValue("application/json")); 
    } 
} 

和API配置過程中設置此(在啓動時):

var jsonFormatter = new JsonMediaTypeFormatter(); 
httpConfiguration.Services.Replace(typeof(IContentNegotiator), new JsonContentNegotiator(jsonFormatter)); 
+0

它的工作!萬分感謝! – AGS17

5

如果您正在使用Newtonsoft.Json,您可以添加JsonProperties你的查看模型:

public class LoginModel : IData 
{ 
    [JsonProperty(PropertyName = "email")] 
    public string Email {get;set;} 

    [JsonProperty(PropertyName = "password")] 
    public string Password {get;set;} 
} 
+1

這是工作,謝謝 – Stefano

+1

正是我在找什麼,謝謝! –

0

您可以在Web API的配置或啓動文件中添加以下兩個語句

using Newtonsoft.Json; 
using Newtonsoft.Json.Serialization; 

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); 
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Formatting = Formatting.Indented; 

是非常重要的使用return Ok()方法,而不是return Json()或這將無法正常工作。