I have a section in WebApiConfig:
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver =
new CamelCasePropertyNamesContractResolver();
But there is one class, which property name I want to be intact (UPPERCASE).
Is there any way to override default transformation for a single case? I'm returning HttpResponseMessage
from API method.
[HttpGet]
[Route("lang/{lang}")]
public HttpResponseMessage GetTranslation(TranslateLang lang)
{
var translations = new Translate().GetLibrary()
.Where(t => t.LangsTranslations.Any(l => l.Language == lang))
.ToDictionary(
l => l.Key,
l => l.LangsTranslations.First(x => x.Language == lang).Text
);
return Request.CreateResponse(HttpStatusCode.OK, translations);
}
Thx.
The solution:
Custom ContractResolver
public class UpperCaseContractResolver : DefaultContractResolver
{
public static readonly UpperCaseContractResolver Instance = new UpperCaseContractResolver();
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
var property = base.CreateProperty(member, memberSerialization);
property.PropertyName = property.PropertyName.ToUpper();
return property;
}
}
Usage:
[HttpGet]
[Route("lang/{lang}")]
public HttpResponseMessage GetTranslation(TranslateLang lang)
{
var translations = new Translate().GetLibrary()
.Where(t => t.LangsTranslations.Any(l => l.Language == lang))
.ToDictionary(
l => l.Key,
l => l.LangsTranslations.First(x => x.Language == lang).Text
);
var formatter = new JsonMediaTypeFormatter();
var json = formatter.SerializerSettings;
json.ContractResolver = new UpperCaseContractResolver();
return Request.CreateResponse(HttpStatusCode.OK, translations, formatter);
}
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.