CamelCase только если свойствоName явно не указано в Json.Net?
Я использую Json.Net для своего сайта. Я хочу, чтобы сериализатор сериализовал имена свойств в camelcase по умолчанию. Я не хочу, чтобы он менял имена свойств, которые я вручную назначил. У меня есть следующий код:
public class TestClass
{
public string NormalProperty { get; set; }
[JsonProperty(PropertyName = "CustomName")]
public string ConfiguredProperty { get; set; }
}
public void Experiment()
{
var data = new TestClass { NormalProperty = null,
ConfiguredProperty = null };
var result = JsonConvert.SerializeObject(data,
Formatting.None,
new JsonSerializerSettings {ContractResolver
= new CamelCasePropertyNamesContractResolver()}
);
Console.Write(result);
}
Выход из Experiment
:
{"normalProperty":null,"customName":null}
Однако, я хочу, чтобы результат был:
{"normalProperty":null,"customName":null}
Можно ли это достичь?
Ответы
Ответ 1
Вы можете переопределить класс CamelCasePropertyNamesContractResolver
следующим образом:
class CamelCase : CamelCasePropertyNamesContractResolver
{
protected override JsonProperty CreateProperty(MemberInfo member,
MemberSerialization memberSerialization)
{
var res = base.CreateProperty(member, memberSerialization);
var attrs = member
.GetCustomAttributes(typeof(JsonPropertyAttribute),true);
if (attrs.Any())
{
var attr = (attrs[0] as JsonPropertyAttribute);
if (res.PropertyName != null)
res.PropertyName = attr.PropertyName;
}
return res;
}
}