将复杂的 json 反序列化为类似字典的结构
deserialize complex json into dictionary like structure
嗨,我有一个 json 文件。我可以修改。但我需要通过它的名字访问。
我需要像这样访问它
var result = sitelang.brands["en"] ; // or
var result = sitelang.["brands"]["en"] ;
我让它可以理解了吗?我对错误感到抱歉。
比你提前。
还有祝你好运!!与您的项目。
EDİT 真实 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# :
"Brands": [
{
"language" : "en",
"translation" : "Brands"
},
{
"language" : "de",
"translation" : "Marken"
},
{
"language" : "tr",
"translation" : "Markalar"
}
//etc
]
然后就可以根据语言动态访问了属性.
您可以为您的 JSON 创建 classes 的这种结构:
class 站点语言
{
public 列出品牌 { get;放; }
public 列出产品 { get;放; }
public 列表 Search_Results { 得到;放; }
}
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;
对于复杂的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"]);
您可以使用 Json.NET 解析 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 translatedName = brands["en"];
将 "Brands"
字符串替换为 "Product"
或 "Search_Results"
以创建其他两个词典。
从你的评论中我了解到你有很多翻译。在这种情况下,您可以创建字典字典:
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"];
嗨,我有一个 json 文件。我可以修改。但我需要通过它的名字访问。 我需要像这样访问它
var result = sitelang.brands["en"] ; // or
var result = sitelang.["brands"]["en"] ;
我让它可以理解了吗?我对错误感到抱歉。
比你提前。
还有祝你好运!!与您的项目。
EDİT 真实 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# :
"Brands": [
{
"language" : "en",
"translation" : "Brands"
},
{
"language" : "de",
"translation" : "Marken"
},
{
"language" : "tr",
"translation" : "Markalar"
}
//etc
]
然后就可以根据语言动态访问了属性.
您可以为您的 JSON 创建 classes 的这种结构: class 站点语言 { public 列出品牌 { get;放; } public 列出产品 { get;放; } public 列表 Search_Results { 得到;放; } }
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;
对于复杂的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"]);
您可以使用 Json.NET 解析 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 translatedName = brands["en"];
将 "Brands"
字符串替换为 "Product"
或 "Search_Results"
以创建其他两个词典。
从你的评论中我了解到你有很多翻译。在这种情况下,您可以创建字典字典:
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"];