У меня есть файл Json с огромным массивом простых данных, экспортированных из базы данных:
{
"type": "table",
"name": "WMIs",
"database": "someDB",
"data":
[
{
"WMI": "SG7",
"Manufacturer": "ABI (GB)"
},
{
"WMI": "WAB",
"Manufacturer": "ABL"
},
...
{
"WMI": "Z29",
"Manufacturer": "SIP (SLO)"
}]}
Я хочу десериализовать данные в словарь‹string, string› со значениями WMI в качестве ключей и значениями производителя в качестве значения, чтобы более тысячи этих пар ключ-значение выглядели бы так, если бы инициализировались вручную:
{"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: при синтаксическом анализе значения обнаружен неожиданный символ: [. Путь «данные», строка 6, позиция 1.
Редактировать: Хорошо, я решил отформатировать файл Json следующим образом.
[
{
"SG7":"ABI (GB)"
},
...
{
"Z29":"SIP (SLO)"
}]
И применил решение Digvijay отсюда: массив JSON в словарь C#, теперь выглядящий как это:
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);
}
}
Это работает! Тем не менее, если кто-нибудь знает, как сообщить парсеру/преобразователю, как работать с исходным форматом, я был бы рад получить ваш вклад!