解析具有不一致字段名称的JSON字符串

我在反序列化以下JSON结构时遇到问题。 每个节点都包含一个ID和带有值的多语言代码。 语言属性的数量不一致。 但我需要这些值作为具有语言字段和值字段的对象列表。

[{ "id":"w_312457", "eng":"deep-fat frying", "ger":"Frittieren" }, { "id":"w_312458", "fre":"frying", "ger":"braten (in Öl)" }, { "id":"w_312477", "ger":"perfekt gewürzte und abgestimmte Soße " }] 

我尝试使用JsonPropertyName属性,我得到了ID值。 但对于lang节点,我不知道我可以指定的名称。 以下是我的CLR对象,

  public class Word { public string Id { get; set; } // This is working // What can I specify here. I need a list of objects each with a lang code and value. } 

方法1:

一种方法是简单地添加所有值并检查它们是否存在。 例如,这是包含所有语言值的类:

 public class Word { public string id { get; set; } public string eng { get; set; } public string ger { get; set; } public string fre { get; set; } } 

你得到的列表如下:

 var words = JsonConvert.DeserializeObject>(json); 

当然这假设只有3种语言,不会添加更多语言(从未发生!)

方法2:

如此线程所示,您可以反序列化为字典对象列表,如下所示:

 var words = JsonConvert.DeserializeObject>>(json); 

您可以访问所有键和值,如下所示:

 foreach (var word in words) { foreach (var key in word.Keys) { Console.WriteLine($"value for the key {key} is {word[key]}"); } } 

这将产生以下结果:

密钥id的值是w_312457

关键工具的价值是深油炸

关键ger的价值是Frittieren

密钥id的值是w_312458

关键的价值是油炸

关键ger的值是braten(在Öl)

密钥id的值是w_312477

关键的价值是perfektgewürzteundabgestimmteSoße