Не удается неявно преобразовать объект в ошибку System.collections.generic.Dictionary при чтении файла JSON - PullRequest
0 голосов
/ 08 мая 2019

Я подключаю простое консольное приложение для переноса данных из одной системы в другую.Чтобы возобновить миграцию, если в какой-то момент происходит сбой, я читаю путь к перенесенному файлу, проверяю, существует ли файл или нет, и считываю содержимое файла в словарь, если он существует.А также из первой системы файл читается как файл json, поэтому я также использую jsonconvert в if / else, но мой код выдает ошибку - «Не удается неявно преобразовать тип« объект »в SystemCollections.Generic.Dictionary,Явное преобразование существует (вы пропустили приведение?) 'Во второй строке кода.

static string MigratedPath = Path.Combine(Environment.CurrentDirectory, "..", "..", "migrated.json");

static Dictionary<string, int> Migrated = File.Exists(MigratedPath) ? (JsonConvert.DeserializeObject(File.ReadAllText(MigratedPath))) : new Dictionary<string, int> ();

Sample JSON file content:
{ 
    "id" : "id_123"
    "createdBy" : "username", 
    "createdDate" : "2019-05-07", 
    "changedBy" : "username", 
    "changedDate" : "2019-05-07", 
    "type" : "type-1", 
    "name" : "xxxxxx",
    "description"  : "desc_xxxxxx",
    "priority"  :  "Major"
    "comments"  : "comments_11111"
},
{ 
     "id" : "id_456"
    "createdBy" : "username", 
    "createdDate" : "2019-05-07", 
    "changedBy" : "username", 
    "changedDate" : "2019-05-07", 
    "type" : "type-1", 
    "name" : "yyyyy",
    "description"  : "desc_yyyyy",
    "priority"  :  "Major"
    "comments"  : "comments_22222"
}, .......

Ошибка в строке кода объявления словаря, которую я попытался дать (JsonConvert.DeserializeObject (File.ReadAllText (MigratedPath), 1) в том же формате, что и словарь (string, int). Это не решило проблему. Я довольно новичок в C #, пожалуйста, предоставьте любые указания о том, как я могу решить эту проблему.

1 Ответ

0 голосов
/ 08 мая 2019

С вашим кодом есть 2 проблемы:

Для троичного оператора (? :) тип возврата должен быть одинаковым в обоих условиях.В вашем случае JsonConvert.DeserializeObject возвращает Object, а в другом случае вы возвращаете новый объект Dictionary, так что существует несоответствие типов, для которого вы должны выполнить явное приведение типов или использовать универсальный JsonConvert.DeserializeObject<Dictionary<string, int>>

.2-й вопрос - это JSON, который вы пытаетесь преобразовать, не в формате словаря, а в формате List, поэтому вы должны создать класс для представления этих данных, и ваш код будет выглядеть как

List<MyClass> Migrated = File.Exists(MigratedPath) ? (JsonConvert.DeserializeObject<List<MyClass>>(File.ReadAllText(MigratedPath))) : new List<MyClass>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...