通过反序列化 Json 文件来初始化 C# 字典

问题描述

我有一个数据库导出的包含大量简单数据的 Json 文件

{
    "type": "table","name": "WMIs","database": "someDB","data": 
[
{
    "WMI": "SG7","Manufacturer": "ABI (GB)"
},{
    "WMI": "WAB","Manufacturer": "ABL"
},...
{
    "WMI": "Z29","Manufacturer": "SIP (SLO)"
}]}

我想将数据反序列化为字典,其中“WMI”的值作为键,“Manufacturer”的值作为值,这样一千多个这些键值对看起来像这,如果手动初始化:

{"SG7","ABI (GB)"},{"WAB","ABL"},//...and so on

我的问题:转换 Json 字符串时

string json= @"{""WMI"":""SG7"",""Manufacturer"":""ABI (GB)""},{""WMI"":""WAB"",""Manufacturer"":""ABL""}";

列表工作正常,使用 Newtonsoft 从文件中读取并像这样转换为字典

Dictionary<string,string> dictObj = JsonConvert.DeserializeObject<Dictionary<string,string>>(File.ReadAllText(jsonPath));

产生这个异常:

Newtonsoft.Json.JsonReaderException:“遇到意外字符 解析值时:[.路径 'data',第 6 行,位置 1。"

编辑:好的,我决定将 Json 文件格式化为这个

[
{
    "SG7":"ABI (GB)"
},...
{
    "Z29":"SIP (SLO)"
}]

并从这里应用 Digvijay 的解决方案:JSON array to C# Dictionary,现在看起来像这样:

string jsonPath = @"C:\filepath\myJson.json";
            JArray a = JArray.Parse(File.ReadAllText(jsonPath));

            Dictionary<string,string> dictSingleWMI = new Dictionary<string,string>();

            foreach (JObject o in a.Children<JObject>())
            {
                foreach (JProperty p in o.Properties())
                {
                    string manufacturer = (string)p.Value;
                    string wmi = (string)p.Name;
                    if (!dictSingleWMI.ContainsKey(wmi))
                    {
                        dictSingleWMI.Add(wmi,manufacturer);
                    }
                }

那行得通!不过,如果有人知道如何告诉解析器/转换器如何处理原始格式,我很乐意听取您的意见!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)