【发布时间】:2020-11-17 06:50:03
【问题描述】:
我有一个如下所示的文件:
{
"Type1":
[
"Value1",
"Value2",
"Value5"
],
"Type2":
[
"Value4",
"Value6",
"Value8"
],
"Type3":
[
"Value7",
"Value3"
]
}
我想将其转换为某种反向字典,因此生成的字典如下所示:
<Value1,Type1>
<Value2,Type1>
<Value3,Type3>
<Value4,Type2>
<Value5,Type1>
<Value6,Type2>
<Value7,Type2>
<Value8,Type3>
最终目标是能够获取任意给定值的类型(都是字符串类型)。我将通过服务请求获取该值,并且我需要获取其类型以进行处理。
这是我目前所拥有的,但看起来很笨拙——我的 JSON 解析技能有点生疏......
public Dictionary<string, string> BuildValueMap(string pathToJson)
{
var jObj = LoadJsonFile(pathToJson);
var valueMap = new Dictionary<string, string>();
foreach (var node in jObj.Properties())
{
var type = node.Name;
foreach (string value in node.Value)
{
valueMap.Add(value, type);
}
}
return valueMap;
}
private static dynamic LoadJsonFile(string pathToJson)
{
using (StreamReader r = new StreamReader(pathToJson))
{
var json = r.ReadToEnd();
return JsonConvert.DeserializeObject(json);
}
}
有没有更简单/更简洁/更简洁/整体更好的方法来做到这一点? TIA 提供任何和所有想法和建议!!
【问题讨论】:
-
你有什么,工作正常,对吧?您可以使用 Linq 使其不那么冗长并且可能更不可读,这就是您想要的吗?根据help center,这可能与基于意见的审查或代码审查接壤。你能更具体地说明你想要什么吗?
-
例如,您可以使用
dynamic jObj = JsonConvert.DeserializeObject(File.ReadAllText(pathToJson))删除 9 行。但是这样的建议更适合Code Review。 -
感谢 cmets,我只是有点不确定这是否是执行转换的正确方法,而且我在任何地方都找不到示例。从目前的反应来看,我可能不会改变它......