Могу ли я настроить сериализацию Json.NET без аннотирования моих классов?
Мне нужно сериализовать некоторые классы сущностей в JSON, используя Json.NET. Для того, чтобы настроить имена свойств, я использую [JsonProperty]
атрибут, как это:
[JsonProperty("lastName")]
public string LastName { get; set; }
Проблема в том, что я предпочел бы, чтобы в моих сущностях не было атрибутов, связанных с JSON... Есть ли способ как-то экранировать аннотации, чтобы они не загромождали мои сущности?
С помощью XmlSerializer
, это может быть легко сделано с XmlAttributeOverrides
учебный класс. Есть ли что-то подобное для Json.NET?
1 ответ
Решение
Да, вы можете создать пользовательский обработчик контракта и настроить JsonProperty
определение без использования атрибутов. Пример следует:
class Person { public string First { get; set; } }
class PersonContractResolver : DefaultContractResolver
{
protected override JsonProperty CreateProperty(
MemberInfo member,
MemberSerialization memberSerialization)
{
var property = base.CreateProperty(member, memberSerialization);
if (member.DeclaringType == typeof(Person) && member.Name == "First")
{
property.PropertyName = "FirstName";
}
return property;
}
}
class Program
{
static void Main(string[] args)
{
var result = JsonConvert.SerializeObject(
new Person { First = "John" },
new JsonSerializerSettings
{
ContractResolver = new PersonContractResolver()
});
Console.WriteLine(result);
}
}
Эти выходные данные этого примера программы будут следующими:
// {"FirstName":"John"}