我尝试用TreeView呈现一个未知的JSON。我还需要编辑这些JSON对象中的字符串并将其写回,因此我需要某种形式的字典,但键可以从层次结构的一端重复到另一端(JSON示例中的“response”)。我反复研究,但无法找到有效的方法。大多数问题也是问winforms或没有使用MVVM,我无法翻译成我后。
JSON示例:
{
"universal": {
"regionalSettings": {
"culture": {
"en-GB": "United Kingdom (en-GB)",
"mk-MK": "Македонија (mk-MK)",
"sq-MK": "Shqipëria (sq-MK)",
},
"language": {
"en-GB": "English (United Kingdom)",
"mk": "Македонски",
"sq": "Shqipe",
},
"timeZone": {
"Europe/Amsterdam": "Europe/Amsterdam",
"Europe/Andorra": "Europe/Andorra",
"Europe/Astrakhan": "Europe/Astrakhan",
"Europe/Athens": "Europe/Athens",
"Europe/Belgrade": "Europe/Belgrade",
"Europe/Berlin": "Europe/Berlin",
"Europe/Bratislava": "Europe/Bratislava",
"Europe/Brussels": "Europe/Brussels",
}
}
}
}
视图片段:
<ScrollViewer>
<TreeView>
<HierarchicalDataTemplate ItemsSource="{Binding Tree}" />
</TreeView>
</ScrollViewer>
ViewModel程式码片段:
public class SomeViewModel
{
public JToken Tree { get; set; }
private void PopulateTreeView()
{
var jsonReader = new JsonReader();
var jsonText = jsonReader.Read("C:\\imaginary_path\\example.json");
var token = JToken.Parse(jsonText);
// where magic should happen
Tree = token;
}
}
“where magic should happen”标记了我缺少代码的地方。在那里,我需要以某种方式分层表示json,并将其转换为可以传递到TreeView的格式,同时还包括字符串(在对象中,而不是在TreeView本身中,因为当选择树中的特定项时,我将需要显示这些字符串),当前我正在传递JObject,它使TreeView显示根目录“System.Windows.HierarchicalDataTemplate”。
我真诚地感谢每一个可以提前帮助。
2条答案
按热度按时间8yparm6h1#
正如我们在评论中总结的,一些Json编辑器可能适合实现目标。
我已经实现了一个示例,如何使用.NET Core
System.Text.Json
(documentation)读取/写入json,并使用TreeView
在其中导航。我没有使用Calibrum.Micro,也不熟悉它,但是我在没有任何外部库的情况下完成了它。我在解决方案中添加了两个助手类。
数据模型实现
查看
MainWindow
的模型检视(整个标记)
wooyq4lh2#
我已经使用了上面的注解的例子,并将其调整到新的构建checkout my work here https://github.com/Mark-Oasan/ArkApiPluginConfigEditor