将多个属性名称映射到Newtonsoft.JSON中的同一字段

时间:2018-03-13 10:10:37

标签: json json.net

我在分布式系统中有两个组件,它们使用Newtonsoft.JSON(JSON.Net)发送序列化/反序列化的消息。

消息属性目前以挪威语发送,我希望将代码库翻译成英语。由于某些消息将以挪威语发送,并由已升级为英语版本的组件处理,因此需要能够同时支持这两种消息。

我希望在反序列化时,“挪威”属性名称以及英语都会映射到同一属性。例如:

例如,用英语输入'name'或用挪威语输入'navn'。

public class Message
{
     [JsonProperty("Navn")]
     public string Name { get; set;}
}

上述问题是它只会映射Navn => Name。我希望将NavnName映射到Name

这是否可以在Newtonsoft.JSON中使用,没有太多的自定义编码?

1 个答案:

答案 0 :(得分:0)

您可以在此答案中使用自定义ContractResolver:

Json.NET deserialize or serialize json string and map properties to different property names defined at runtime

或者

使用[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属性名称的名称:NavnName