我在分布式系统中有两个组件,它们使用Newtonsoft.JSON(JSON.Net)发送序列化/反序列化的消息。
消息属性目前以挪威语发送,我希望将代码库翻译成英语。由于某些消息将以挪威语发送,并由已升级为英语版本的组件处理,因此需要能够同时支持这两种消息。
我希望在反序列化时,“挪威”属性名称以及英语都会映射到同一属性。例如:
例如,用英语输入'name'或用挪威语输入'navn'。
public class Message
{
[JsonProperty("Navn")]
public string Name { get; set;}
}
上述问题是它只会映射Navn => Name
。我希望将Navn
和Name
映射到Name
。
这是否可以在Newtonsoft.JSON中使用,没有太多的自定义编码?
答案 0 :(得分:0)
您可以在此答案中使用自定义ContractResolver:
或者
使用[JsonProperty("")]查找属性名称的不同变体,并返回其中一个属性:
public class Message
{
private string _name;
[JsonProperty("Navn" )]
public string NorwegianName { get; set; }
[JsonProperty("Name")]
public string Name {
get { return _name ?? NorwegianName; }
set { _name = value; } }
}
这将返回带有JSON属性名称的名称:Navn
或Name
。