c#解析轻松的json以生成树
因此,我需要解析类似以下内容的文件:c#解析轻松的json以生成树,c#,json,regex,validation,tree,C#,Json,Regex,Validation,Tree,因此,我需要解析类似以下内容的文件: { pl: { GENERIC: { BACK: "COFNIJ", WAIT: "CZEKAJ", PAGES: { ABOUTME: { ID: "ID", }, INFO: { STATUS: "STATUS", } }
{
pl: {
GENERIC: {
BACK: "COFNIJ",
WAIT: "CZEKAJ",
PAGES: {
ABOUTME: {
ID: "ID",
},
INFO: {
STATUS: "STATUS",
}
}
},
TOP_MENU: {
LOGGED: "Zalogowany",
OPTIONS: "Opcje",
}
},
en: {
GENERIC: {
BACK: "BACK",
WAIT: "WAIT",
PAGES: {
ABOUTME: {
ID: "ID",
},
INFO: {
STATUS: "STATUS",
}
}
},
TOP_MENU: {
LOGGED: "Logged",
OPTIONS: "Options",
}
}
}
但我不知道该文件将包含多少元素,因此我无法创建类来解析该文件
例如: 路径:generic/back en:“back”pl:“cofnij”
Dictionary Dictionary=JsonConvert.DeserializeObject(文件)代码>
为了获得主键,在将上述放松的json转换为有效的json之后,我认为树结构将是更有效的方法。
谢谢你的帮助 您的第一个问题已在此处提出:
第二个问题听起来有点像这样:你的第一个问题已经在这里被问过了:
您可以创建一个动态对象
dynamic myObj = JsonConvert.DeserializeObject(json);
foreach (Newtonsoft.Json.Linq.JProperty jproperty in myObj)
{
//..
}
然后对其进行预处理以创建树结构。这将有助于:
编辑:
这是通过迭代属性将反序列化动态转换为树结构的方法:
public void Convert()
{
dynamic myObj = JsonConvert.DeserializeObject(json);
PrintObject(myObj, 0);
}
private void PrintObject(JToken token, int depth)
{
if (token is JProperty)
{
var jProp = (JProperty)token;
var spacer = string.Join("", Enumerable.Range(0, depth).Select(_ => "\t"));
var val = jProp.Value is JValue ? ((JValue)jProp.Value).Value : "-";
Console.WriteLine($"{spacer}{jProp.Name} -> {val}");
foreach (var child in jProp.Children())
{
PrintObject(child, depth + 1);
}
}
else if (token is JObject)
{
foreach (var child in ((JObject)token).Children())
{
PrintObject(child, depth + 1);
}
}
}
这里已经提出了您的第一个问题:
第二个问题听起来有点像这样:你的第一个问题已经在这里被问过了:
您可以创建一个动态对象
dynamic myObj = JsonConvert.DeserializeObject(json);
foreach (Newtonsoft.Json.Linq.JProperty jproperty in myObj)
{
//..
}
然后对其进行预处理以创建树结构。这将有助于:
编辑:
这是通过迭代属性将反序列化动态转换为树结构的方法:
public void Convert()
{
dynamic myObj = JsonConvert.DeserializeObject(json);
PrintObject(myObj, 0);
}
private void PrintObject(JToken token, int depth)
{
if (token is JProperty)
{
var jProp = (JProperty)token;
var spacer = string.Join("", Enumerable.Range(0, depth).Select(_ => "\t"));
var val = jProp.Value is JValue ? ((JValue)jProp.Value).Value : "-";
Console.WriteLine($"{spacer}{jProp.Name} -> {val}");
foreach (var child in jProp.Children())
{
PrintObject(child, depth + 1);
}
}
else if (token is JObject)
{
foreach (var child in ((JObject)token).Children())
{
PrintObject(child, depth + 1);
}
}
}
你在创作过程中有什么影响吗?因为pl
和en
都有一点……让我们说是蹩脚的、设计不太好的JSON。如果没有这个属性,例如一个包含此信息的属性,那么就更容易了。否:/此JavaScript文件来自角度:/您在创建过程中有任何影响吗?因为pl
和en
都有一点……让我们说是蹩脚的、设计不太好的JSON。如果没有这个属性,比如一个包含这个信息的属性,那么就更容易了。不:/这个JavaScript文件来自angular:/Ye,就是这样!非常感谢!是的,就是这样!非常感谢!