Вы должны войти, чтобы создавать сообщения и темы.

Пробую изучать C# нужна подсказка или помощ

1◄Страница 3 из 7► 7

Adler, спасибо, буду дальше изучать, я наверно пропустил этот урок, не помню такого материала.

Ещё модель можно быстро получить при помощи Visual Studio, если выбрать в меню "правка -> специальная вставка -> вставить JSON как классы"
И рекомендую посмотреть что такое атрибут [JsonPropertyName]. Потому что у JSON свой стандарт именования переменных, а у C# свой.

t4k, спасибо, буду изучать) позже, пока далее смотрю уроки.

Всем привет
Дошёл до видео о работе с json  через сериализацию/десериализацию.

там есть такой код

string json = new WebClient().DownloadString("http://free.ipwhois.io/json/23.76.76.25?lang=ru");
            var d = new JavaScriptSerializer().Deserialize<dynamic>(json);
            label1.Text = d["city"];

Студия ругается, на:    скобки [ ]  ,  Ошибка CS0021 Не удается применить индексирование через [] к выражению типа "object".
Директивы все добавил.

Привет.
А так Скопированоlabel1.Text = d.GetValue("city").ToString();?

«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн

Приветствую Mikhail, 
тоже не хочет, такого значения GetValue вообще нет.

Упс, точно.
Может просто Скопированоlabel1.Text = d.city;, на сколько помню, тип dynamic вроде не поддерживает доступ через оператор [ ], но это не точно.
Еще может быть такое, что строки с сервера получаются не правильно, но это вряд ли конечно.

«Любой дурак может знать. Дело в том, чтобы понять.» — Альберт Эйнштейн

нееее  
label1.Text = d.city;   это точно не вариант.

Спойлер
dynamic  - это динамический объект который может меняться по ходу программирования

я уже пробовал по разному, но пока никак.
label1.Text = d["city"].ToString();  и label1.Text = d("city"); и  label1.Text = d[city] ;  разные варианты.

Десериализуйте как конкретный класс 

Спойлер

public class IPInfo
    {
        public string ip { get; set; }
        public bool success { get; set; }
        public string type { get; set; }
        public string continent { get; set; }
        public string continent_code { get; set; }
        public string country { get; set; }
        public string country_code { get; set; }
        public string country_flag { get; set; }
        public string country_capital { get; set; }
        public string country_phone { get; set; }
        public string country_neighbours { get; set; }
        public string region { get; set; }
        public string city { get; set; }
        public double latitude { get; set; }
        public double longitude { get; set; }
        public string asn { get; set; }
        public string org { get; set; }
        public string isp { get; set; }
        public string timezone { get; set; }
        public string timezone_name { get; set; }
        public int timezone_dstOffset { get; set; }
        public int timezone_gmtOffset { get; set; }
        public string timezone_gmt { get; set; }
        public string currency { get; set; }
        public string currency_code { get; set; }
        public string currency_symbol { get; set; }
        public double currency_rates { get; set; }
        public string currency_plural { get; set; }
    }

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

ПриветствуюAdler, 
Вы бы могли мне пояснить на живом примере, как правильно написать код, или где я допускаю ошибки в своём коде?

Спойлер

using Nancy.Json;
using Newtonsoft.Json;
using System;
using System.Net;
using System.Windows.Forms;


namespace FileSerch
{
    public class JsonClass
    {
        public string ip { get; set; }
        public bool success { get; set; }
        public string type { get; set; }
        public string continent { get; set; }
        public string continent_code { get; set; }
        public string country { get; set; }
        public string country_code { get; set; }
        public string country_flag { get; set; }
        public string country_capital { get; set; }
        public string country_phone { get; set; }
        public string country_neighbours { get; set; }
        public string region { get; set; }
        public string city { get; set; }
        public double latitude { get; set; }
        public double longitude { get; set; }
        public string asn { get; set; }
        public string org { get; set; }
        public string isp { get; set; }
        public string timezone { get; set; }
        public string timezone_name { get; set; }
        public int timezone_dstOffset { get; set; }
        public int timezone_gmtOffset { get; set; }
        public string timezone_gmt { get; set; }
        public string currency { get; set; }
        public string currency_code { get; set; }
        public string currency_symbol { get; set; }
        public double currency_rates { get; set; }
        public string currency_plural { get; set; }
    }
    
    public partial class Form1 : Form
    {        
        public Form1()
        {
            InitializeComponent();
        }

        void button1_Click(object sender, EventArgs e)
        {
            JsonClass myJsonClass = JsonConvert.DeserializeObject<JsonClass>($"http://ipwho.is/8.8.4.4");

            label1.Text = string.Join(Environment.NewLine, myJsonClass);
            


            //   string json = new WebClient().DownloadString("http://free.ipwhois.io/json/23.76.76.25?lang=ru");
            //   var d = new JavaScriptSerializer().Deserialize<dynamic>(json);
            //   label1.Text = d["city"];
        }
    }
}

 


Если я правильно понимаю, то мы добавляем директивы нужные (using Nancy.Json; using Newtonsoft.Json; using System; using System.Net; using System.Windows.Forms;), затем добавляем класс в котором есть все нам необходимые параметры из ссылки "http://ipwho.is/8.8.4.4" , а потом на кнопку button1 мы пишем инструкцию:
JsonClass myJsonClass = JsonConvert.DeserializeObject<JsonClass>($"http://ipwho.is/8.8.4.4"); // тут мы в переменную myJsonClass сохраняем данные с сайта
label1.Text = string.Join(Environment.NewLine, myJsonClass);  // тут мы выводим в label1 все данные из нашей переменной myJsonClass 

я правильно понимаю? и почему этот код не работает?
А так же, как мне вывести например в label1 не все параметры с сайта, а например нужные мне ? пример: label1.Text = myJsonClass("timezone","city", "country")
Прошу пояснить мне на примере моём (до меня так лучше доходит, на примере).
Спасибо

Если код написать так: 

Спойлер

using Nancy.Json;
using Newtonsoft.Json;
using System;
using System.Net;
using System.Windows.Forms;


namespace FileSerch
{
    public class JsonClass
    {
        public string ip { get; set; }
        public bool success { get; set; }
        public string type { get; set; }
        public string continent { get; set; }
        public string continent_code { get; set; }
        public string country { get; set; }
        public string country_code { get; set; }
        public string country_flag { get; set; }
        public string country_capital { get; set; }
        public string country_phone { get; set; }
        public string country_neighbours { get; set; }
        public string region { get; set; }
        public string city { get; set; }
        public double latitude { get; set; }
        public double longitude { get; set; }
        public string asn { get; set; }
        public string org { get; set; }
        public string isp { get; set; }
        public string timezone { get; set; }
        public string timezone_name { get; set; }
        public int timezone_dstOffset { get; set; }
        public int timezone_gmtOffset { get; set; }
        public string timezone_gmt { get; set; }
        public string currency { get; set; }
        public string currency_code { get; set; }
        public string currency_symbol { get; set; }
        public double currency_rates { get; set; }
        public string currency_plural { get; set; }
    }
    
    public partial class Form1 : Form
    {        
        public Form1()
        {
            InitializeComponent();
        }

        void button1_Click(object sender, EventArgs e)
        {
            
               string json = new WebClient().DownloadString("http://ipwho.is/8.8.4.4");
               var d = new JavaScriptSerializer().Deserialize<dynamic>(json);
               label1.Text = d["city"];

             // label1.Text = d["city"]["country"]["timezone"];
             // label1.Text = d["city", "country", "timezone"];
              
        }
    }
}

 


то, программа работает, и выдаёт нам один запрос "city" .
если я хочу вывести несколько данных в label1, то не хочет, как вывести несколько данных, то что указать ей?    пробовал разные варианты.
label1.Text = d["city"]["country"]["timezone"];
label1.Text = d["city", "country", "timezone"];

Всем привет
Есть вопрос по уроку (Следим за файловой системой – FileSystemWatcher)
То ли баг у меня, то ли я не разобрался, и где-то допустил ошибку не пойму.  Если у кого-то получилось, подскажите в чём это дело?
т.е. на создание файла, мне пишет "Фаил 1.txt переименован" , вместо создан.

код программы

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace Whatcher
{
    public partial class Form1 : Form
    {
        void Watcher_Created(object s, FileSystemEventArgs e) => label1.Text += $"Файл 1.txt создан {DateTime.Now}\n";
        void Watcher_Deleted(object s, FileSystemEventArgs e) => label1.Text += $"Файл 1.txt удалён {DateTime.Now}\n";
        void Watcher_Renamed(object s, FileSystemEventArgs e) => label1.Text += $"Файл 1.txt переименован {DateTime.Now}\n";
        public Form1()
        {
            InitializeComponent();
        }

        void Form1_Load(object sender, EventArgs e)
        {
            FileSystemWatcher watcher = new FileSystemWatcher(@"C:\Users\virus\Desktop", "1.txt");
            watcher.EnableRaisingEvents = true;
            watcher.SynchronizingObject = this;

            watcher.Created += new FileSystemEventHandler(Watcher_Created);
            watcher.Deleted += new FileSystemEventHandler(Watcher_Deleted);
            watcher.Renamed += new RenamedEventHandler(Watcher_Renamed);
        }
    }
}

 


видео моё как работает программа.
мой проект

Aleksey, привет, Скопированоjson - это тип данных, который имеет такую структуру. Однако, у Тебя это строка, поэтому Скопированоd определяется в формат словаря. Чтобы Тебе получить несколько значений можно сделать цикл, который Тебе склеит несколько значений в одно, либо склеивать вручную через Скопировано+

Пример цикла

string json = new WebClient().DownloadString("http://ipwho.is/8.8.4.4");
var d = new JavaScriptSerializer().Deserialize<dynamic>(json);

string[] whatsNeed = {

    "ip",
    "city",
    "country",
};

string result = "";

foreach (string what in whatsNeed) {
    if (d.ContainsKey(what)) // если ключ есть, то добавлем значение к строке
        result += d[what] + "\n";
}

Однако, у этого способа есть небольшой недостаток:
СкопированоSystem.Collections.Generic.Dictionary`2[System.String,System.Object]
Вот, что произойдет, если попробовать получить значение с помощью ключа Скопированоflag, потому что он хранит в Себе еще один словарь.
Чтобы получить значение из словаря в словаре, можно сделать так:
Скопированоd["flag"]["emoji"]

Через Скопировано+
Скопированоstring result = d["city"] + d["country"] + d["flag"]["emoji"];

Также, можно увидеть полноценный ответ от сервера в качестве файла:
СкопированоFile.WriteAllText(@"C:\путь\к\файлу.тхт", json);
И там посмотреть какие ключи есть

Лайкнул Aleksey
Aleksey

Пишет, что файл переименован, потому что  когда Ты создаешь файл у него уже есть название СкопированоНовый текстовый документ.txt, поэтому Ты переименовываешь уже созданный файл в Скопировано1.txt (именно за ним Ты и следишь), если Ты создашь файл с таким названием, например через c#, то все будет отображаться корректно

Лайкнул Aleksey
Aleksey
1◄Страница 3 из 7► 7