Слайд 1Лекция №15
«Web, JSON»
Москва 2019
Слайд 3JSON
JSON основан на двух структурах данных:
Коллекция пар ключ/значение. В разных
языках, эта концепция реализована как объект, запись, структура, словарь, хэш,
именованный список или ассоциативный массив.
Упорядоченный список значений. В большинстве языков это реализовано как массив, вектор, список или последовательность.
Это универсальные структуры данных. Почти все современные языки программирования поддерживают их в какой-либо форме.
Слайд 4JSON OBJECT
JSON был создан для передачи данных между сайтами или
из сайта.
Во многих API есть JSON,
Facebook API, vk API и.т.д.
https://samples.openweathermap.org/data/2.5/weather?q=London,uk&appid=b6907d289e10d714a6e88b30761fae22
https://www.jsonmate.com/
Слайд 5JSON OBJECT
Разработка приложения для работы с hh.ru
https://api.hh.ru/vacancies/
https://codebeautify.org/jsonviewer
Слайд 6Пример работы на C#
// Person person = new Person("Sasha", "Ivanov",
19);
/* string jsonData =
JsonConvert.SerializeObject(person);
Console.WriteLine(jsonData);
Person person2 = (Person)JsonConvert.DeserializeObject
(jsonData);
Console.WriteLine(person2);*/
// File.WriteAllText("person.json", JsonConvert.SerializeObject(person));
/*Person person3 = new Person();
if (File.Exists("person.json"))
person3 = JsonConvert.DeserializeObject(File.ReadAllText("person.json"));
Console.WriteLine(person3);
Console.ReadLine();*/
Слайд 7C# тип dynamic
В версии .NET 4.0 язык C# стал поддерживать
ключевое слово dynamic. На самом высоком уровне dynamic можно рассматривать
как специализированную форму System.Object, в том смысле, что типу данных dynamic может быть присвоено любое значение. На первый взгляд, это порождает ужасную путаницу, поскольку теперь получается, что доступны три способа определения данных, внутренний тип которых явно не указан в коде:
var a = "String"; object b = "SomeString"; dynamic c = "AllString";
Динамическую переменную от переменной, объявленной неявно или через ссылку System.Object, значительно отличает то, что она не является строго типизированной. Другими словами, динамические данные не типизированы статически. Для компилятора C# это выглядит так, что элемент данных, объявленный с ключевым словом dynamic, может получить какое угодно начальное значение, и на протяжении времени его существования это значение может быть заменено новым (и возможно, не связанным с первоначальным)
Слайд 8C# тип dynamic
Однако (и это очень важно) корректность указываемых членов
компилятором не проверяется! Помните, что в отличие от переменной, объявленной
как System.Object, динамические данные не являются статически типизированными. Вплоть до времени выполнения не известно, поддерживают ли вызываемые динамические данные указанный член, переданы ли корректные параметры, правильно ли указан член, и т.д. Поэтому, как бы странно это не выглядело, следующий метод cкомпилируется без ошибок:
dynamic textData = "Hello";
Console.WriteLine(textData.ToUpper());
// Здесь следовало ожидать ошибку компилятора, но все компилируется нормально.
Console.WriteLine(textData.toupper());
Console.WriteLine(textData.Foo(10, "ее", DateTime.Now));
Слайд 9C# тип dynamic
Однако (и это очень важно) корректность указываемых членов
компилятором не проверяется! Помните, что в отличие от переменной, объявленной
как System.Object, динамические данные не являются статически типизированными. Вплоть до времени выполнения не известно, поддерживают ли вызываемые динамические данные указанный член, переданы ли корректные параметры, правильно ли указан член, и т.д. Поэтому, как бы странно это не выглядело, следующий метод cкомпилируется без ошибок:
dynamic textData = "Hello";
Console.WriteLine(textData.ToUpper());
// Здесь следовало ожидать ошибку компилятора, но все компилируется нормально.
Console.WriteLine(textData.toupper());
Console.WriteLine(textData.Foo(10, "ее", DateTime.Now));