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