JsonPropertyAttribute
クラスをJSONにシリアル化して戻す方法を制御します。リソースファイルで実際のjsonプロパティ名を定義している場合、それらのリソースファイルが更新されるか、アプリケーションが単に別のロケールに切り替わる場合でも、クラスのシリアル化の方法が変わります。これは一般的に良い考えではありません。
ただし、プログラムが頻繁に変更されるため、再コンパイルせずにクラスのシリアル化を変更できるようにしたい場合、またはクラスをシリアル化する複数の方法が必要な場合は、独自のを作成する必要があると思いますIContractResolver
。
次に例を示します。
public class ResourceNameContractResolver :
CamelCasePropertyNamesContractResolver
{
protected override IList<JsonProperty> CreateProperties CreatePropertiesInternal(Type type, MemberSerialization memberSerialization)
{
var list = base.CreateProperties(type, memberSerialization)
foreach (JsonProperty p in list)
{
p.PropertyName = this.GetRealNameFromResourceFile(p.PropertyName);
}
return list;
}
private string GetRealNameFromResourceFile(string originalPropertyName)
{
// Look up name from resource file
}
}
そして、このクラスを使用するには
var settings = new JsonSerializerSettings()
{
ContractResolver = new ResourceNameContractResolver()
};
JsonTextWriter writer = new JsonTextWriter(...);
JsonSerializer serializer = JsonSerializer.Create(settings);
serializer.Serialize(writer, myData);