我在分布式系统中有两个组件,它们发送使用 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和映射Name到Name.
这在 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。
| 归档时间: |
|
| 查看次数: |
12772 次 |
| 最近记录: |