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

2023-12-04

我在反序列化以下 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.
 }

方法一:

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

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<List<Word>>(json);

当然,这是假设只有 3 种语言,并且不会添加更多语言(这永远不会发生!)

方法二:

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

var words = JsonConvert.DeserializeObject<List<Dictionary<string, string>>>(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

关键 ger 的值是 perfekt gewürzte und abgestimmte Soße

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

解析字段名不一致的JSON字符串 的相关文章

随机推荐