2016-04-27 3 views
5

मैं LoginModel है:संपत्ति नामों में से छोटे अक्षर पहले अक्षर से json लौटें

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

और मैं वेब 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

एपीआई से ऊंट मामले में लौटे सभी जेसन डेटा को मजबूर करने के लिए डिफ़ॉल्ट ऊंट केस अनुबंध समाधानकर्ता के साथ न्यूटॉन्सॉफ्ट जेसन का उपयोग करना आसान है।

इस तरह एक कक्षा बनाएं:

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")); 
    } 
} 

और (स्टार्टअप पर) एपीआई विन्यास के दौरान इस सेट: अपने Newtonsoft.Json उपयोग कर रहे हैं

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

यह काम कर रहा है! आपका बहुत बहुत धन्यवाद! – AGS17

5

, आप जोड़ सकते हैं 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

आप वेब एपीआई के विन्यास में या स्टार्टअप फाइल करने के लिए दो निम्न कथन जोड़ सकते हैं

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

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

लेकिन यह बहुत महत्वपूर्ण है return Json()के बजाय return Ok() विधि का उपयोग करने के लिए या इस से काम नहीं चलेगा है ।

संबंधित मुद्दे