Как подружить zennoposter и newtonsoft.json?

romasa464

Client
Регистрация
18.06.2017
Сообщения
69
Благодарностей
12
Баллы
8
Добрый день, друзья. Излагаю проблему.

Никак не могу подружить зенку с ньютонсофтом. Что делаю:
1. В референсы добавляю либу.
2. В юзинг прописываю:
Код:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
Далее -- смешно, копирую всё из оффициального фака. В общий код добавляю класс:

Код:
public class Account
{
    public string Email { get; set; }
    public bool Active { get; set; }
    public DateTime CreatedDate { get; set; }
    public IList<string> Roles { get; set; }
}
Создаю шарп кубик и туда пишу:

Код:
string json = @"{
   'Email': '[email protected]',
   'Active': true,
   'CreatedDate': '2013-01-20T00:00:00Z',
   'Roles': [
     'User',
     'Admin'
   ]
}";

Account account = JsonConvert.DeserializeObject<Account>(json);

return account.Email;
В итоге вылетает ошибка следующего содержания:

Код:
Компиляция кода  Ошибка в действии "CS0012" "The type 'System.Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Runtime, Version=4.0.20.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.". [Строка: 10; Cтолбец: 1]
Лог указывает на эту строку:

Код:
Account account = JsonConvert.DeserializeObject<Account>(json);
Будьте добры, укажите на ошибку.
 

esouldy

Client
Регистрация
28.02.2016
Сообщения
185
Благодарностей
92
Баллы
28
а для чего это делается?
 

romasa464

Client
Регистрация
18.06.2017
Сообщения
69
Благодарностей
12
Баллы
8

esouldy

Client
Регистрация
28.02.2016
Сообщения
185
Благодарностей
92
Баллы
28
ну тогда
var o = JObject.Parse(json);
или
var o =JArray.Parse(json);
и доступ к свойствам o["bla"]["bla"]
 

romasa464

Client
Регистрация
18.06.2017
Сообщения
69
Благодарностей
12
Баллы
8

Moadip

Client
Регистрация
26.09.2015
Сообщения
509
Благодарностей
823
Баллы
93
Может для начала попробовать сделать что здесь написано.
Код:
Компиляция кода  Ошибка в действии "CS0012" "The type 'System.Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'System.Runtime, Version=4.0.20.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.". [Строка: 10; Cтолбец: 1]
Добавить в рефы либу System.Runtime.

А вообще конечно странно, у меня без проблем эта либа работает.
 
  • Спасибо
Реакции: romasa464

romasa464

Client
Регистрация
18.06.2017
Сообщения
69
Благодарностей
12
Баллы
8
Спасибо большое всем, кто мне помогал, к счастью, получилось разобраться с проблемой.
Итак, чтобы распарсить JSON при помощи либы от newtonsoft нужно:
Добавить в референсы следующие либы:
Код:
Newtonsoft.json
System.Runtime
System.Dinamic.Runtime
System.ObjectModel
В юзинг прописать:

Код:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
В самом коде пишем следующее:

Код:
//Сюда кладём json массив который нужно распарсить
string json = project.Variables["json"].Value;
//Тут создаём переменную тип dynamic в которую кладём результат работы функции JObject.Parse(json) 
dynamic account = JObject.Parse(json);
//Обращаемся к результату как к массиву
return account.response.count;
 
Последнее редактирование:

samsonnn

Client
Регистрация
02.06.2015
Сообщения
1 630
Благодарностей
1 303
Баллы
113
Спасибо большое всем, кто мне помогал, к счастью, получилось разобраться с проблемой.
Итак, чтобы распарсить JSON при помощи либы от newtonsoft нужно:
Добавить в референсы следующие либы:
Код:
Newtonsoft.json
System.Runtime
System.Dinamic.Runtime
System.ObjectModel
В юзинг прописать:

Код:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;
В самом коде пишем следующее:

Код:
//Сюда кладём json массив который нужно распарсить
string json = project.Variables["json"].Value;
//Тут создаём переменную тип dynamic в которую кладём результат работы функции JObject.Parse(json)
dynamic account = JObject.Parse(json);
//Обращаемся к результату как к массиву
return account.response.count;

Выполнение действия CSharp OwnCode Не удается выполнить привязки исполняющей среды по нулевой ссылке
 

artur23

Client
Регистрация
14.04.2014
Сообщения
205
Благодарностей
15
Баллы
18
как добавить Newtonsoft.json в ZennoPoster, подскажите. Не могу понять, я с c# не особо. нужно xml превратить в json: https://dotnetfiddle.net/O2XfDi
 

barkasian

Client
Регистрация
03.12.2014
Сообщения
127
Благодарностей
137
Баллы
43
Вот >>здесь<< очень внятно дается рассказ о дружбе JSON и C# )
 
  • Спасибо
Реакции: artur23

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 354
Благодарностей
3 279
Баллы
113
Не следует добавлять Newtonsoft.Json, так как он уже встроен в постер и попытка добавления проваливается из-за конфликта.
C#:
using Global.ZennoLab.Json.Linq;
 
  • Спасибо
Реакции: Greez, trecho и one

westruk

Client
Регистрация
30.03.2020
Сообщения
325
Благодарностей
103
Баллы
43
Не следует добавлять Newtonsoft.Json, так как он уже встроен в постер и попытка добавления проваливается из-за конфликта.
C#:
using Global.ZennoLab.Json.Linq;
Используя подключение Newtonsoft в проект как вы написали, юзаю такой код
C#:
string json = File.ReadAllText("settings.json");
dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(json);
jsonObj["Bots"][0]["Password"] = "new password";
string output = Newtonsoft.Json.JsonConvert.SerializeObject(jsonObj, Newtonsoft.Json.Formatting.Indented);
File.WriteAllText("settings.json", output);
При компиляции ловлю такую ошибку
Компиляция кода Ошибка в действии "CS0103" "The name 'Newtonsoft' does not exist in the current context"
В чем трабл?
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 354
Благодарностей
3 279
Баллы
113
Используя подключение Newtonsoft в проект как вы написали, юзаю такой код
C#:
string json = File.ReadAllText("settings.json");
dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(json);
jsonObj["Bots"][0]["Password"] = "new password";
string output = Newtonsoft.Json.JsonConvert.SerializeObject(jsonObj, Newtonsoft.Json.Formatting.Indented);
File.WriteAllText("settings.json", output);
При компиляции ловлю такую ошибку


В чем трабл?
Прочитайте сообщение выше. У вас неправильный using, а вы всё так же используете путь Newtonsoft.
 
  • Спасибо
Реакции: westruk

Gooldbee

Client
Регистрация
16.05.2019
Сообщения
213
Благодарностей
24
Баллы
18
Используя подключение Newtonsoft в проект как вы написали, юзаю такой код
C#:
string json = File.ReadAllText("settings.json");
dynamic jsonObj = Newtonsoft.Json.JsonConvert.DeserializeObject(json);
jsonObj["Bots"][0]["Password"] = "new password";
string output = Newtonsoft.Json.JsonConvert.SerializeObject(jsonObj, Newtonsoft.Json.Formatting.Indented);
File.WriteAllText("settings.json", output);
При компиляции ловлю такую ошибку


В чем трабл?
как десериализировать с помощью этой библиотеки? не понимаю.

пытаюсь
JObject temp = JObject.parse(json);
Но ведь это не массив как нужно.
 

djaga

Client
Регистрация
26.04.2020
Сообщения
505
Благодарностей
1 050
Баллы
93
как десериализировать с помощью этой библиотеки? не понимаю.

пытаюсь
JObject temp = JObject.parse(json);
Но ведь это не массив как нужно.

Для начал нужно понять какой у вас JSON.
Потом, на сколько я знаю, Newtonsoft уже интегрирован в методы ZP. Указано выше в этой теме > using Global.ZennoLab.Json.Linq;
В третьих, в этом случае, когда вы хотите десеризовать в объекты, нужно подготовить класс и поля. Ссылка на официальный faq.
В четвертых вам может помочь мой вопрос который недавно разбирался. Там есть пример десерилизации JSON.
В пятых, для упрощения создания класса с полями есть внутренняя фича от VS. А так же web конвертеры. Например, такой ссылка.

Будут вопросы, пишите в ЛС.)
 
Последнее редактирование:

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 165
Благодарностей
811
Баллы
113
Вообще периодически возникает геморой с подключением встроенной в постер библиотеки. Поэтому решил всё-таки подключаться к скачанной, ибо свою толи не видит, толи ещё что, но выдаёт ошибки
 

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 165
Благодарностей
811
Баллы
113
Вот опять проблема со встроенной библиотекой, при компиляции 2 ошибки:
The type 'JArray' is defined in an assembly that is not referenced. You must add a reference to assembly 'Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed
The type 'JObject' is defined in an assembly that is not referenced. You must add a reference to assembly 'Newtonsoft.Json, Version=11.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed

Подключаю Newtosoft.Json - ошибок нет, меняю на Global.ZennoLab.Json - получаю ошибки выше.
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)