Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 将复杂的json反序列化为类似字典的结构_C#_Json_Dictionary_Structure_Json Deserialization - Fatal编程技术网

C# 将复杂的json反序列化为类似字典的结构

C# 将复杂的json反序列化为类似字典的结构,c#,json,dictionary,structure,json-deserialization,C#,Json,Dictionary,Structure,Json Deserialization,嗨,我有一个json文件。我可以修改。但我需要通过它的名字访问。 我需要像这样访问它 var result = sitelang.brands["en"] ; // or var result = sitelang.["brands"]["en"] ; 我说得明白了吗。我不是本地人,为我的错误感到抱歉 比你提前 祝你好运!!与你的项目 EDİTreal json文件 { "Brands": [ { "en": "Brands", "tr": "Markalar", "d

嗨,我有一个json文件。我可以修改。但我需要通过它的名字访问。 我需要像这样访问它

var result = sitelang.brands["en"] ;      // or
var result = sitelang.["brands"]["en"] ; 
我说得明白了吗。我不是本地人,为我的错误感到抱歉
比你提前
祝你好运!!与你的项目

EDİTreal json文件

{
"Brands": [
{
  "en": "Brands",
  "tr": "Markalar",
  "de": "Marken",
  "bg": "Производител",
  "el": "μάρκες",
  "uk": "бренди",
  "nl": "Merken",
  }
],
"Products": [
{
  "en": "Products",
  "tr": "Ürünler",
  "de": "Produkte",
  "bg": "Продукти",
  "el": "προϊόντα",
  "uk": "продукти",
  "nl": "producten",
  }
   ],
 "Search_Results": [
  {
  "en": "Arama Sonuçları",
  "tr": "Search Results",
  "de": "Suchergebnisse",
  "bg": "Резултати от търсенето",
  "el": "Αποτελέσματα Αναζήτησης",
  "uk": "Результати пошуку",
  }
 ],
}

如果可以修改JSON,这就是强类型语言C#所需要的:


然后您可以根据语言属性动态访问它。

您可以为JSON创建这样的类结构: 类SiteLang { 公共列表品牌{get;set;} 公共列表产品{get;set;} 公共列表搜索结果{get;set;} }

    class Language
    {
        public string en { get; set; }
        public string tr { get; set; }
        public string de { get; set; }
        public string bg { get; set; }
        public string el { get; set; }
        public string uk { get; set; }
        public string nl { get; set; } 
    }

    class Brands : Language
    {
    }

    class Products : Language
    {
    }

    class Search_Results : Language
    {
    }
然后反序列化对象:

var str = @"{
'Brands': [
{
    'en': 'Brands',
    'tr': 'Markalar',
    'de': 'Marken',
    'bg': 'Производител',
    'el': 'μάρκες',
    'uk': 'бренди',
    'nl': 'Merken',
    'fr': 'Marques',
    'ru': 'Бренды',
    'it': 'Marchi',
    'es': 'Marcas',
    'ja': 'ブランド',
    'mk': 'производители',
    'pt': 'Marcas',
    'ar': 'العلامات التجارية'
    }
],
'Products': [
{
    'en': 'Products',
    'tr': 'Ürünler',
    'de': 'Produkte',
    'bg': 'Продукти',
    'el': 'προϊόντα',
    'uk': 'продукти',
    'nl': 'producten',
    'fr': 'Des produits',
    'ru': 'Продукты',
    'it': 'Prodotti',
    'es': 'Productos',
    'ja': '製品',
    'mk': 'производи',
    'pt': 'Produtos',
    'ar': 'المنتجات'
    }
    ],
    'Search_Results': [
    {
    'en': 'Arama Sonuçları',
    'tr': 'Search Results',
    'de': 'Suchergebnisse',
    'bg': 'Резултати от търсенето',
    'el': 'Αποτελέσματα Αναζήτησης',
    'uk': 'Результати пошуку',
    'nl': 'Zoekresultaten',
    'fr': 'Résultats de la recherche',
    'ru': 'результаты поиска',
    'it': 'Risultati di Ricerca',
    'es': 'Resultados de la búsqueda',
    'ja': '検索結果',
    'mk': 'Резултати од пребарувањето',
    'pt': 'Procurar Resultados',
    'ar': 'نتائج البحث'
    }
    ],
}";

var siteLang = JsonConvert.DeserializeObject<SiteLang>(str);

var s = siteLang.Brands.FirstOrDefault().en;
var str=@”{
“品牌”:[
{
"en":"Brands",,
‘tr’:‘Markalar’,
‘de’:‘Marken’,
“bg”:“Пззззззззз”,
‘el’:‘μρκε’,
“英国”:“英国”,
“nl”:“Merken”,
“fr”:“侯爵”,
“ru”:“ББцц”,
“it”:“Marchi”,
“es”:“Marcas”,
“是的”:ブランド',
“mk”:“mk”,
“pt”:“Marcas”,
“ar”:“ar”
}
],
“产品”:[
{
"en":"产品",,
‘tr’:‘rünler’,
‘de’:‘Produkte’,
“bg”:“ППППБППППаааааа”,
‘el’:‘προόντα’,
‘英国’:‘英国’,
“nl”:“producten”,
“fr”:“Des produits”,
‘ru’:‘ППцццц’,
‘it’:‘Prodotti’,
“es”:“Productos”,
“是的”:製品',
“mk”:“mk”,
‘pt’:‘Produtos’,
“ar”:“ar”
}
],
“搜索结果”:[
{
‘en’:‘Arama Sonuçları’,
'tr':'搜索结果',
“de”:“Suchergebnisse”,
“bg”:“保加利亚”,
‘el’:‘ποτελέσματαΑναζήτησης’,
“英国”:“英国”,
“nl”:“Zoekresultaten”,
“fr”:“Résultats de la recherche”,
“ru”:“ru”,
“它”:“Risultati di Ricerca”,
‘es’:‘Resultados de la búsqueda’,
“是的”:検索結果',
“mk”:“ззааааааааааааааа1072,
“pt”:“Procurar Resultados”,
“ar”:“ar”
}
],
}";
var siteLang=JsonConvert.DeserializeObject(str);
var s=siteLang.Brands.FirstOrDefault().en;

对于复杂的JSON结构,可以使用以下命令:-

using System.Web.Script.Serialization;

var jss = new JavaScriptSerializer();
var dict = jss.Deserialize<Dictionary<string,dynamic>>(jsonText);

Console.WriteLine(dict["Brands"]); /
Console.WriteLine(dict["Products"]); 
使用System.Web.Script.Serialization;
var jss=新的JavaScriptSerializer();
var dict=jss.Deserialize(jsonText);
Console.WriteLine(dict[“品牌])/
Console.WriteLine(dict[“产品]);
您可以使用解析JSON而无需事先声明类,然后使用LINQ将其转换为字典:

var root = (JObject) JsonConvert.DeserializeObject(json);
var brands = root["Brands"]
  .AsJEnumerable()
  .First()
  .AsJEnumerable()
  .Cast<JProperty>()
  .ToDictionary(j => j.Name, j => j.Value);
“产品”
“搜索结果”
替换
“品牌”
字符串以创建其他两个词典

从你的评论中我可以理解你有很多翻译。在这种情况下,您可以创建字典字典:

var root = (JObject) JsonConvert.DeserializeObject(json);
var dictionary = root
  .AsJEnumerable()
  .Cast<JProperty>()
  .ToDictionary(
    j => j.Name,
    j => j.Value
      .AsJEnumerable()
      .First()
      .AsJEnumerable()
      .Cast<JProperty>()
      .ToDictionary(k => k.Name, k => k.Value)
  );

我建议您显示您的JSON并删除生成的类,因为您似乎不想使用它们。如果需要,您还可以修改JSON,或者它必须保持原样吗?我可以修改它,但用法正是我强烈需要的看起来正是我需要的。你使(这/不可能)成为可能什么是根[品牌]。如何获取?@user3521369:我在第一个版本的代码中遗漏了一行代码,但我已经在不久前编辑过了。如果你刷新你的浏览器,你应该会看到它。这很好,但是如果我有100个项目,比如品牌、产品、word1、word2。。。。。。单词100?一定有way@user3521369:当然有。请查看我的编辑。我可以不使用动态进行编辑吗?是的,请添加字符串!dynamic适用于JSON中包含多个级别的字符串的复杂结构。希望有帮助。
var translatedName = brands["en"];
var root = (JObject) JsonConvert.DeserializeObject(json);
var dictionary = root
  .AsJEnumerable()
  .Cast<JProperty>()
  .ToDictionary(
    j => j.Name,
    j => j.Value
      .AsJEnumerable()
      .First()
      .AsJEnumerable()
      .Cast<JProperty>()
      .ToDictionary(k => k.Name, k => k.Value)
  );
var translatedName = dictionary["Brands"]["tr"];