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

romasa464

Client
Регистрация
18.06.2017
Сообщения
70
Благодарностей
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
Сообщения
70
Благодарностей
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
Сообщения
70
Благодарностей
12
Баллы
8

Moadip

Client
Регистрация
26.09.2015
Сообщения
509
Благодарностей
824
Баллы
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
Сообщения
70
Благодарностей
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 802
Благодарностей
1 474
Баллы
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
Сообщения
202
Благодарностей
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 529
Благодарностей
3 375
Баллы
113
Не следует добавлять Newtonsoft.Json, так как он уже встроен в постер и попытка добавления проваливается из-за конфликта (если не "повезёт" с той же версией, но это временно).
C#:
using Global.ZennoLab.Json.Linq;
 
Последнее редактирование:

westruk

Client
Регистрация
30.03.2020
Сообщения
354
Благодарностей
113
Баллы
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 529
Благодарностей
3 375
Баллы
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
Сообщения
224
Благодарностей
25
Баллы
28
Используя подключение 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

Administrator
Команда форума
Регистрация
26.04.2020
Сообщения
554
Благодарностей
1 136
Баллы
93
как десериализировать с помощью этой библиотеки? не понимаю.

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

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

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

Zedx

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

Zedx

Client
Регистрация
12.06.2018
Сообщения
1 364
Благодарностей
920
Баллы
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 - получаю ошибки выше.
 
  • Спасибо
Реакции: Pierre Paul Jacques

Pierre Paul Jacques

Активный пользователь
Регистрация
08.10.2023
Сообщения
137
Благодарностей
36
Баллы
28
Здравствуйте, уважаемые участники форума,
Я хотел бы выразить свою искреннюю благодарность за бесценную помощь, оказанную в этой ветке. Благодаря вашему руководству мне удалось успешно интегрировать библиотеку Newtonsoft.Json в мой проект ZennoPoster, преодолев начальные препятствия, с которыми я столкнулся.
Изначально я столкнулся с несколькими ошибками, связанными с отсутствием ссылок и проблемами с определениями типов, подобными тем, что описаны здесь другими. Подробные обсуждения и примеры, которыми поделилось сообщество, оказались крайне важными для понимания необходимых настроек и корректировок кода.
Благодаря вашим советам мне удалось добавить правильные ссылки на System.Runtime, Newtonsoft.Json и другие необходимые сборки. Кроме того, переход с Global.ZennoLab.Json.Linq на Newtonsoft.Json.Linq по вашим рекомендациям помог разрешить возникшие конфликты.
Ваша готовность делиться знаниями и практические советы не только решили мои непосредственные проблемы, но и обогатили мое понимание работы с JSON в C# в рамках ZennoPoster. Я ценю поддерживающий и сотруднический дух этого сообщества.
Еще раз благодарю вас за щедрую помощь!
С наилучшими пожеланиями,

as I'm not sure about the Russian translation that I posted to you and I'm putting the original message in English just in case!

Hello everyone,

I wanted to extend my heartfelt thanks for the invaluable assistance provided in this thread. With your guidance, I've successfully integrated the Newtonsoft.Json library into my ZennoPoster project, overcoming the initial hurdles I encountered.

Initially, I faced several errors related to missing references and issues with type definitions, similar to what others have described here. The detailed discussions and examples shared by the community were crucial in helping me understand the necessary configurations and code adjustments.

Thanks to your advice, I was able to add the correct references to System.Runtime, Newtonsoft.Json, and other necessary assemblies. Additionally, switching from Global.ZennoLab.Json.Linq to Newtonsoft.Json.Linq based on your suggestions helped resolve the conflicts I was experiencing.

Your willingness to share knowledge and the practical tips provided have not only solved my immediate problems but have also enriched my understanding of handling JSON in C# within ZennoPoster. I appreciate the supportive and collaborative spirit of this community.

Thank you once again for your generous help!
 

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