控制您的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);