Десериализация динамического объекта JSON, Net - PullRequest
1 голос
/ 16 мая 2019

У меня есть два приложения: первое получает данные из базы данных, используя SqlKata, а затем сериализует их с помощью Newtonsoft и сохраняет их в файл, например:

  SqlServerCompiler compiler = new SqlServerCompiler();
                QueryFactory queryFactory = new QueryFactory(MyConnection,compiler);
                 var data = queryFactory.Query("tblName").Where("ID",1).First();
                string json = JsonConvert.SerializeObject(data);
                StreamWriter writer = new ...
                writer.write(json);

, это работает нормально, и создается файл jsonс данными внутри него
Второе приложение считывает файл JSON, десериализует его и затем добавляет его в базу данных, например:

  using(StreamReader streamReader = new StreamReader(@"C:/MyFile")){
    string temp = streamReader.ReadToEnd();
    var toInsert = JsonConvert.DeserializeObject(temp);
    //note that i dont have a class that represents the structure of the deserialized object,thus i should catch it dynamically
    queryFactory.Query("tblName").Insert(toInsert);
}

Вставка вызывает исключение: System.Reflection.TargetParameterCountException: 'Несоответствие количества параметров'

, зная, что таблица базы данных совпадает.

1 Ответ

1 голос
/ 16 мая 2019

Если у вас нет класса, вы можете использовать динамический тип. Динамический тип избегает проверки типов во время компиляции; вместо этого он разрешает тип во время выполнения.

Попробуйте это:

 var toInsert = JsonConvert.DeserializeObject<dynamic>(temp);
...