JSON'dan C#'a nasıl veri çekilir?

Oswald

Decapat
Katılım
14 Ekim 2022
Mesajlar
709
Çözümler
2
Daha fazla  
Cinsiyet
Erkek
Soru yukarıdaki gibi. Bunu nasıl yapabilirim? Mesela JSON'da yazdığım verileri MSSQL'e aktarıp oradan C#'a çekebilir miyim?
 
Son düzenleyen: Moderatör:
Verileri MSSQL'de oluşturmaktan ziyade JSON'da oluşturup ardından MSSQL Serverları ile çekmekten bahsediyorum.
Kurduğun cümle diyor ki; "JSON verimi önce MSSQL'e aktaracağım, sonra MSSQL'den C#'a çekeceğim."

Bende diyorum ki, neden önce MSSQL'e aktarıp sonra uygulamada kullanmak için bir daha çekiyorsun? Ha yok amaç zaten JSON gelen datayı, db'ye aktarmaksa, evet, yapabilirsin. Aşağıda açıklarım.
Mesela JSON'da yazdığım verileri MSSQL'e aktarıp oradan C#'a çekebilir miyim?
Datayı JSON'da oluşturup, database'e aktarabilirsin. JSON Parser ile parse edip, daha sonrasında, parse ettiğin datayı sql sorguna bind edip göndereceksin.
 
Soru yukarıdaki gibi. Bunu nasıl yapabilirim? Mesela JSON'da yazdığım verileri MSSQL'e aktarıp oradan C#'a çekebilir miyim?
Evet çok basit. İstersen örnek atabilirim.
 
Kurduğun cümle diyor ki; "JSON verimi önce MSSQL'e aktaracağım, sonra MSSQL'den C#'a çekeceğim."

Bende diyorum ki, neden önce MSSQL'e aktarıp sonra uygulamada kullanmak için bir daha çekiyorsun? Ha yok amaç zaten JSON gelen datayı, db'ye aktarmaksa, evet, yapabilirsin. Aşağıda açıklarım.

Datayı JSON'da oluşturup, database'e aktarabilirsin. JSON Parser ile parse edip, daha sonrasında, parse ettiğin datayı sql sorguna bind edip göndereceksin.
Veriyi JSON'da oluşturmak çok daha basit geldi bana o yüzden. Oluşturduğum veriyi, veri tabanı olan MsSQL'de tutacağım. MsSQL'de veri oluşturmak karışık geldi bana.

Teşekkür ederim!

Evet çok basit. İstersen örnek atabilirim.
Olur, atarsan çok sevinirim.

Soru yukarıdaki gibi. Bunu nasıl yapabilirim? Mesela JSON'da yazdığım verileri MSSQL'e aktarıp oradan C#'a çekebilir miyim?
Sanırım direkt JSON'dan çekilebiliyormuş.
Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.
bu videoda öyle gösteriyor ama bilmiyorum tam. MsSQL'e ihtiyacım var mı her türlü? Amacım bir projem var kim milyoner olmak ister tarzında. Veri tabanında 100 soru saklayacağım ortalama ve C#'a da oyuncunun olduğu para seviyesinin zorluğuna göre soruları oluşturmuş olduğum veri tabanından çekmek. Bunun yanında oyunu oynayan kişinin "İstatistikler" adında bir yerde oynadığı oyunların kayıtlarını görmesini sağlamak.Mesela işte oynanan oyun sayısı 5, en son oynanan oyunda 4. soruda elenmiş gibisinden istatistikler. 2 Tane veri tabanına ihtiyacım var yani.
 
Son düzenleme:
bu videoda öyle gösteriyor ama bilmiyorum tam. MsSQL'e ihtiyacım var mı her türlü? Amacım bir projem var kim milyoner olmak ister tarzında. Veri tabanında 100 soru saklayacağım ortalama ve C#'a da oyuncunun olduğu para seviyesinin zorluğuna göre soruları oluşturmuş olduğum veri tabanından çekmek. Bunun yanında oyunu oynayan kişinin "İstatistikler" adında bir yerde oynadığı oyunların kayıtlarını görmesini sağlamak.Mesela işte oynanan oyun sayısı 5, en son oynanan oyunda 4. soruda elenmiş gibisinden istatistikler. 2 Tane veri tabanına ihtiyacım var yani.
100 soruyu veri tabanında saklamana gerek yok. JSON olarak saklaman daha kolay olur. He insanların hile yapması kolay olur ama zaten client-side executable dağıttığın her şeyde hile ihtimali var.

Örneğin;
JSON:
{
    "1": {
        "soru": "Türkiye'nin başkenti aşağıdakilerden hangisidir?",
        "şıklar": {
            "a": "Eskişehir",
            "b": "İstanbul",
            "c": "Ankara",
            "d": "Iğdır"
        },
        "cevap": "c"
    },
    "2": {
        "soru": "Cumhuriyet kaç yılında ilan edilmiştir?",
        "şıklar": {
            "a": "1453",
            "b": "1071",
            "c": "1919",
            "d": "1923"
        },
        "cevap": "d"
    }
}

Bu şekilde tutarsın dosyada. Sonrasında herhangi bir JSON Parser'ı ile parse edersin.

Basitçe şöyle bir kod yazdım mesela;
C#:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace SoruCevap2
{
    public partial class Form1 : Form
    {
        private JObject sorular;
        private class Şık
        {
            public string? şık, cevap;
            public Şık(string Şık, string Cevap)
            {
                şık = Şık;
                cevap = Cevap;
            }
        }
        class Soru
        {
            public string SoruMetni;
            public Şık[] Şıklar;
            public string DoğruCevap;
            public Soru(JToken? soru)
            {
                string[] keys = ["soru", "şıklar", "cevap"];
                if (soru == null)
                    return;
                foreach(var key in keys)
                {
                    if (soru[key] == null) { throw new ArgumentNullException($"{key} olmalı."); }
                    switch(key)
                    {
                        case "soru":
                            SoruMetni = (string)soru[key];
                            break;
                        case "şıklar":
                            Şıklar = ŞıklarıGetir(soru[key]);
                            break;
                        case "cevap":
                            DoğruCevap = (string)soru[key];
                            break;
                    }
                }
            }
            private Şık[] ŞıklarıGetir(JToken token)
            {
                string[] keys = ["a", "b", "c", "d"];
                if (token == null) { throw new ArgumentNullException("Şıklar olmalı"); }
                Şık[] şıklar = new Şık[4];
                int i = 0;
                foreach (var key in keys)
                {
                    if (token[key] == null) { throw new ArgumentNullException($"{key} olmalı."); }
                    şıklar[i++] = new Şık(key, (string)token[key]);
                }
                return şıklar;
            }
        }

        List<Soru> Sorular;
        int soru_index;
        public Form1()
        {
            InitializeComponent();
            // BaseDirectory çalıştırılabilirin olduğu konumu veriyor.
            // sorular.json'u aynı klasörde araması için yapıyorum bunu.
            // Eğer bulamazsa exception atar. Exception handling'i ile kendin ilgilenirsin.
            Sorular = new List<Soru>();
            using (StreamReader reader = File.OpenText($@"{AppDomain.CurrentDomain.BaseDirectory}\sorular.json"))
            {
                JObject o = (JObject)JToken.ReadFrom(new JsonTextReader(reader));
                foreach(var (soru_indexi, soru_) in o)
                {
                    Sorular.Add(new Soru(soru_));
                }
            }
            Load += FormLoad;
            foreach (var control in Controls)
            {
                if (control.GetType() == typeof(Button))
                {
                    var btn = (Button)control;
                    btn.Click += ButtonClick;
                }
            }
            soru_index = 0;
;        }

        public void FormLoad(object? sender, EventArgs e)
        {
            if (Sorular.Count == 0)
            {
                return;
            }
            SoruyuYerleştir(Sorular[soru_index]);
        }

        void SoruyuYerleştir(Soru soru)
        {
            label2.Text = soru.SoruMetni;
            int i = 0;
            foreach (var control in Controls)
            {
                if (control.GetType() == typeof(Button))
                {
                    var btn = (Button)control;
                    btn.Text = soru.Şıklar[i].cevap;
                    btn.Name = soru.Şıklar[i++].şık;
                }
            }
            
        }

        public void ButtonClick(object? sender, EventArgs e)
        {
            if (sender == null) { return;  }
            Button button = (Button)sender;
            
            if (button.Name == Sorular[soru_index].DoğruCevap)
            {
                if(soru_index < Sorular.Count - 1)
                {
                    MessageBox.Show("Doğru bildiniz! Bir sonraki soruya geçelim.");
                    SoruyuYerleştir(Sorular[++soru_index]);
                    return;
                }
                MessageBox.Show("Tüm soruları doğru bildiniz!");
                Application.Exit();
            }
            MessageBox.Show("Üzgünüz, yanlış cevap.");
        }
    }
}
1728400825914.png


Şöyle de bir arayüz. Rastgele falan getirmek için kendin yaparsın bir şeyler. Üstüne uğraşır kafana göre geliştirirsin. Temeli verdim.



demo.gif
 
Veriyi JSON'da oluşturmak çok daha basit geldi bana o yüzden. Oluşturduğum veriyi, veri tabanı olan MsSQL'de tutacağım. MsSQL'de veri oluşturmak karışık geldi bana.

Teşekkür ederim!


Olur, atarsan çok sevinirim.


Sanırım direkt JSON'dan çekilebiliyormuş.
Bu içeriği görüntülemek için üçüncü taraf çerezlerini yerleştirmek için izninize ihtiyacımız olacak.
Daha detaylı bilgi için, çerezler sayfamıza bakınız.
bu videoda öyle gösteriyor ama bilmiyorum tam. MsSQL'e ihtiyacım var mı her türlü? Amacım bir projem var kim milyoner olmak ister tarzında. Veri tabanında 100 soru saklayacağım ortalama ve C#'a da oyuncunun olduğu para seviyesinin zorluğuna göre soruları oluşturmuş olduğum veri tabanından çekmek. Bunun yanında oyunu oynayan kişinin "İstatistikler" adında bir yerde oynadığı oyunların kayıtlarını görmesini sağlamak.Mesela işte oynanan oyun sayısı 5, en son oynanan oyunda 4. soruda elenmiş gibisinden istatistikler. 2 Tane veri tabanına ihtiyacım var yani.

100 soruyu veri tabanında saklamana gerek yok. JSON olarak saklaman daha kolay olur. He insanların hile yapması kolay olur ama zaten client-side executable dağıttığın her şeyde hile ihtimali var.

Örneğin;
JSON:
{
    "1": {
        "soru": "Türkiye'nin başkenti aşağıdakilerden hangisidir?",
        "şıklar": {
            "a": "Eskişehir",
            "b": "İstanbul",
            "c": "Ankara",
            "d": "Iğdır"
        },
        "cevap": "c"
    },
    "2": {
        "soru": "Cumhuriyet kaç yılında ilan edilmiştir?",
        "şıklar": {
            "a": "1453",
            "b": "1071",
            "c": "1919",
            "d": "1923"
        },
        "cevap": "d"
    }
}

Bu şekilde tutarsın dosyada. Sonrasında herhangi bir JSON Parser'ı ile parse edersin.

Basitçe şöyle bir kod yazdım mesela;
C#:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace SoruCevap2
{
    public partial class Form1 : Form
    {
        private JObject sorular;
        private class Şık
        {
            public string? şık, cevap;
            public Şık(string Şık, string Cevap)
            {
                şık = Şık;
                cevap = Cevap;
            }
        }
        class Soru
        {
            public string SoruMetni;
            public Şık[] Şıklar;
            public string DoğruCevap;
            public Soru(JToken? soru)
            {
                string[] keys = ["soru", "şıklar", "cevap"];
                if (soru == null)
                    return;
                foreach(var key in keys)
                {
                    if (soru[key] == null) { throw new ArgumentNullException($"{key} olmalı."); }
                    switch(key)
                    {
                        case "soru":
                            SoruMetni = (string)soru[key];
                            break;
                        case "şıklar":
                            Şıklar = ŞıklarıGetir(soru[key]);
                            break;
                        case "cevap":
                            DoğruCevap = (string)soru[key];
                            break;
                    }
                }
            }
            private Şık[] ŞıklarıGetir(JToken token)
            {
                string[] keys = ["a", "b", "c", "d"];
                if (token == null) { throw new ArgumentNullException("Şıklar olmalı"); }
                Şık[] şıklar = new Şık[4];
                int i = 0;
                foreach (var key in keys)
                {
                    if (token[key] == null) { throw new ArgumentNullException($"{key} olmalı."); }
                    şıklar[i++] = new Şık(key, (string)token[key]);
                }
                return şıklar;
            }
        }

        List<Soru> Sorular;
        int soru_index;
        public Form1()
        {
            InitializeComponent();
            // BaseDirectory çalıştırılabilirin olduğu konumu veriyor.
            // sorular.json'u aynı klasörde araması için yapıyorum bunu.
            // Eğer bulamazsa exception atar. Exception handling'i ile kendin ilgilenirsin.
            Sorular = new List<Soru>();
            using (StreamReader reader = File.OpenText($@"{AppDomain.CurrentDomain.BaseDirectory}\sorular.json"))
            {
                JObject o = (JObject)JToken.ReadFrom(new JsonTextReader(reader));
                foreach(var (soru_indexi, soru_) in o)
                {
                    Sorular.Add(new Soru(soru_));
                }
            }
            Load += FormLoad;
            foreach (var control in Controls)
            {
                if (control.GetType() == typeof(Button))
                {
                    var btn = (Button)control;
                    btn.Click += ButtonClick;
                }
            }
            soru_index = 0;
;        }

        public void FormLoad(object? sender, EventArgs e)
        {
            if (Sorular.Count == 0)
            {
                return;
            }
            SoruyuYerleştir(Sorular[soru_index]);
        }

        void SoruyuYerleştir(Soru soru)
        {
            label2.Text = soru.SoruMetni;
            int i = 0;
            foreach (var control in Controls)
            {
                if (control.GetType() == typeof(Button))
                {
                    var btn = (Button)control;
                    btn.Text = soru.Şıklar[i].cevap;
                    btn.Name = soru.Şıklar[i++].şık;
                }
            }
           
        }

        public void ButtonClick(object? sender, EventArgs e)
        {
            if (sender == null) { return;  }
            Button button = (Button)sender;
           
            if (button.Name == Sorular[soru_index].DoğruCevap)
            {
                if(soru_index < Sorular.Count - 1)
                {
                    MessageBox.Show("Doğru bildiniz! Bir sonraki soruya geçelim.");
                    SoruyuYerleştir(Sorular[++soru_index]);
                    return;
                }
                MessageBox.Show("Tüm soruları doğru bildiniz!");
                Application.Exit();
            }
            MessageBox.Show("Üzgünüz, yanlış cevap.");
        }
    }
}
Eki Görüntüle 2324969

Şöyle de bir arayüz. Rastgele falan getirmek için kendin yaparsın bir şeyler. Üstüne uğraşır kafana göre geliştirirsin. Temeli verdim.



Eki Görüntüle 2324979
Örnek bu. Ayrıca hile yapmayı önlemek için json dosyasını rahatlıkla gizleyebilirsin.
 
100 soruyu veri tabanında saklamana gerek yok. JSON olarak saklaman daha kolay olur. He insanların hile yapması kolay olur ama zaten client-side executable dağıttığın her şeyde hile ihtimali var.

Örneğin;
JSON:
{
    "1": {
        "soru": "Türkiye'nin başkenti aşağıdakilerden hangisidir?",
        "şıklar": {
            "a": "Eskişehir",
            "b": "İstanbul",
            "c": "Ankara",
            "d": "Iğdır"
        },
        "cevap": "c"
    },
    "2": {
        "soru": "Cumhuriyet kaç yılında ilan edilmiştir?",
        "şıklar": {
            "a": "1453",
            "b": "1071",
            "c": "1919",
            "d": "1923"
        },
        "cevap": "d"
    }
}

Bu şekilde tutarsın dosyada. Sonrasında herhangi bir JSON Parser'ı ile parse edersin.

Basitçe şöyle bir kod yazdım mesela;
C#:
using Newtonsoft.Json;
using Newtonsoft.Json.Linq;

namespace SoruCevap2
{
    public partial class Form1 : Form
    {
        private JObject sorular;
        private class Şık
        {
            public string? şık, cevap;
            public Şık(string Şık, string Cevap)
            {
                şık = Şık;
                cevap = Cevap;
            }
        }
        class Soru
        {
            public string SoruMetni;
            public Şık[] Şıklar;
            public string DoğruCevap;
            public Soru(JToken? soru)
            {
                string[] keys = ["soru", "şıklar", "cevap"];
                if (soru == null)
                    return;
                foreach(var key in keys)
                {
                    if (soru[key] == null) { throw new ArgumentNullException($"{key} olmalı."); }
                    switch(key)
                    {
                        case "soru":
                            SoruMetni = (string)soru[key];
                            break;
                        case "şıklar":
                            Şıklar = ŞıklarıGetir(soru[key]);
                            break;
                        case "cevap":
                            DoğruCevap = (string)soru[key];
                            break;
                    }
                }
            }
            private Şık[] ŞıklarıGetir(JToken token)
            {
                string[] keys = ["a", "b", "c", "d"];
                if (token == null) { throw new ArgumentNullException("Şıklar olmalı"); }
                Şık[] şıklar = new Şık[4];
                int i = 0;
                foreach (var key in keys)
                {
                    if (token[key] == null) { throw new ArgumentNullException($"{key} olmalı."); }
                    şıklar[i++] = new Şık(key, (string)token[key]);
                }
                return şıklar;
            }
        }

        List<Soru> Sorular;
        int soru_index;
        public Form1()
        {
            InitializeComponent();
            // BaseDirectory çalıştırılabilirin olduğu konumu veriyor.
            // sorular.json'u aynı klasörde araması için yapıyorum bunu.
            // Eğer bulamazsa exception atar. Exception handling'i ile kendin ilgilenirsin.
            Sorular = new List<Soru>();
            using (StreamReader reader = File.OpenText($@"{AppDomain.CurrentDomain.BaseDirectory}\sorular.json"))
            {
                JObject o = (JObject)JToken.ReadFrom(new JsonTextReader(reader));
                foreach(var (soru_indexi, soru_) in o)
                {
                    Sorular.Add(new Soru(soru_));
                }
            }
            Load += FormLoad;
            foreach (var control in Controls)
            {
                if (control.GetType() == typeof(Button))
                {
                    var btn = (Button)control;
                    btn.Click += ButtonClick;
                }
            }
            soru_index = 0;
;        }

        public void FormLoad(object? sender, EventArgs e)
        {
            if (Sorular.Count == 0)
            {
                return;
            }
            SoruyuYerleştir(Sorular[soru_index]);
        }

        void SoruyuYerleştir(Soru soru)
        {
            label2.Text = soru.SoruMetni;
            int i = 0;
            foreach (var control in Controls)
            {
                if (control.GetType() == typeof(Button))
                {
                    var btn = (Button)control;
                    btn.Text = soru.Şıklar[i].cevap;
                    btn.Name = soru.Şıklar[i++].şık;
                }
            }
           
        }

        public void ButtonClick(object? sender, EventArgs e)
        {
            if (sender == null) { return;  }
            Button button = (Button)sender;
           
            if (button.Name == Sorular[soru_index].DoğruCevap)
            {
                if(soru_index < Sorular.Count - 1)
                {
                    MessageBox.Show("Doğru bildiniz! Bir sonraki soruya geçelim.");
                    SoruyuYerleştir(Sorular[++soru_index]);
                    return;
                }
                MessageBox.Show("Tüm soruları doğru bildiniz!");
                Application.Exit();
            }
            MessageBox.Show("Üzgünüz, yanlış cevap.");
        }
    }
}
Eki Görüntüle 2324969

Şöyle de bir arayüz. Rastgele falan getirmek için kendin yaparsın bir şeyler. Üstüne uğraşır kafana göre geliştirirsin. Temeli verdim.



Eki Görüntüle 2324979
Hocam tek kelimeyle şahane. Elinize sağlık, tam da aradığım şey buydu. Çok teşekkür ediyorum gerçekten. 🙏

Örnek bu. Ayrıca hile yapmayı önlemek için json dosyasını rahatlıkla gizleyebilirsin.
Teşekkür ederim 🤩
 

Technopat Haberler

Yeni konular

Geri
Yukarı