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

Kar*_*sar 7 json json.net

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

消息属性当前以挪威语发送,我希望将代码库翻译成英语。由于发生了一些变化,一些消息将以挪威语发送,并由已升级到英语版本的组件处理,因此它需要能够支持这两种语言。

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

例如,采用英语中的“name”或挪威语中的“navn”。

public class Message
{
     [JsonProperty("Navn")]
     public string Name { get; set;}
}
Run Code Online (Sandbox Code Playgroud)

上面的问题是它只能从Navn => Name. 我希望它能够将Navn和映射NameName.

这在 Newtonsoft.JSON 中可用,无需太多自定义编码吗?

ism*_*el. 10

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

Json.NET 反序列化或序列化 json 字符串并将属性映射到运行时定义的不同属性名称

或者

使用 [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; } }
}
Run Code Online (Sandbox Code Playgroud)

Navn这将返回带有 JSON 属性 name:或 的名称Name

  • 虽然这是一个选项,但我有大量的类和属性名称,因此当我有数百个属性时,只为 1 个属性执行所有代码会非常麻烦。我更喜欢一些更简洁的方法,比如为同一个属性指定多个 [JsonProperty] 属性。 (2认同)