What is JSON And How To Using It In C#

Merhabalar.

Geçen hafta C# Corner adresinde yayınlanmış olan İngilizce makalemin orijinal kopyasını kendi web adresimde de paylaşmaya karar verdim. 11.04.2016 10:47 itibari ile 2.9k okunmasıyla beraber, aldığım geri bildirimler ve gelen mesajlar ile “Bir sonraki makale ne olsun?” sorusuna da cevap arıyorum. Herkese iyi kodlamalar.

Working with JSON in C#
(What is JSON And How to Using It In C#)

This article will cover the following:

  • What is JSON
  • How to create JSON string in C#
  • How to read JSON string in C#

 

What is JSON

JSON (JavaScript Object Notation) is standard designed for human-readable data interchange. I think the thing of ‘human-readable’ for developers. JSON works with a tree structure and it looks like a XML. It’s shorter and It’s very easy for using. If you have already experience with XML, you will certainly learn easily.

JSON vs. XML

Let’s examine this expression { “name”: “Stephen Cousins” }

  1. If you’re using JSON, you must put your expression in “{ }”
  2. “name” is the key.
  3. “Stephen Cousins” is a value of “name” key

 

JSON has the logic like { “key”: “value” } statement.
And also JSON has the array.

Let’s take another expression and examine that:

"students": [
{ "name": "Stephen Cousins" },
{ "name": "Austin A. Newton" },
{ "name": "Adam Wilhite" },
{ "name": "Enis Kurtay YILMAZ" }
]
  1. “students” is the key.
  2. “[“ and “]” square brackets are array statement. It means there is the array between “[“ and “]” in brackets.
  3. All of statements in square brackets are value of “students” key.
  4. As you see there are four arrays in square brackets and it represents four student names.

 

How to create JSON string in C#

Please create your new console project from Visual Studio

File -> New-> Project->Console Application (.NET Framework 3.5)

If you want to create or read a JSON string, you need a JSON Serialize or Deserialize.

So, please open your Solution Explorer in Visual Studio, right click on References, click “Manage NuGet Packages”

Please search “Newtonsoft.JSON” on Nuget Package Manager and install it.

Please add “using Newtonsoft.Json;” statement. If you forget to add this statement, you can’t serialize any JSON strings.

Example JSON:

{
 "universities": {
 "university": "South Carolina State University",
 "students": [
 { "name": "Stephen Cousins" },
 { "name": "Austin A. Newton" },
 { "name": "Adam Wilhite" },
 { "name": "Enis Kurtay YILMAZ"}
 ]
 }
}

Now, you need to create class for example JSON. If you want to create easily, you can use that web site -> www.jsonutils.com

Creating JSON string in C#:

using System;
using System.Collections.Generic;
using Newtonsoft.Json;

namespace EKY.CSharpCornerJSONArticle
{
 public class Student
 {
 public string name { get; set; }
 }
 public class Universities
 {
 public string university { get; set; }
 public IList<Student> students { get; set; }
 }
 public class ClassUniversities
 {
 public Universities universities { get; set; }
 }
 class Program
 {
 static void Main(string[] args)
 {
 ClassUniversities university1 = new ClassUniversities();

 university1.universities = new Universities();
 university1.universities.university = "South Carolina State University";

 List<Student> listStudent = new List<Student>();
 Student student1 = new Student { name = "Stephen Cousins"};
 Student student2 = new Student { name = "Austin A. Newton" };
 Student student3 = new Student { name = "Adam Wilhite" };
 Student student4 = new Student { name = "Enis Kurtay YILMAZ" };

 listStudent.Add(student1);
 listStudent.Add(student2);
 listStudent.Add(student3);
 listStudent.Add(student4);

 university1.universities.students = listStudent;
 string json = JsonConvert.SerializeObject(university1);

 Console.WriteLine(json);
 Console.ReadLine();
 }
 }
}

Result.

 

How to read JSON string in C#

I think this part will be very easy for you. Just you need an example JSON string and JSON class of your example. You can use www.jsonutils.com again, if you want to create a class for your example JSON.

I will JSON strings from my website -> http://www.eniskurtayyilmaz.com/api/get_posts/

using System;
using System.Collections.Generic;
using Newtonsoft.Json;
using System.Net;
using System.IO;

namespace EKY.CSharpCornerJSONArticle
{
 public class Category
 {
 public int id { get; set; }
 public string slug { get; set; }
 public string title { get; set; }
 public string description { get; set; }
 public int parent { get; set; }
 public int post_count { get; set; }
 }
 public class Tag
 {
 public int id { get; set; }
 public string slug { get; set; }
 public string title { get; set; }
 public string description { get; set; }
 public int post_count { get; set; }
 }
 public class Author
 {
 public int id { get; set; }
 public string slug { get; set; }
 public string name { get; set; }
 public string first_name { get; set; }
 public string last_name { get; set; }
 public string nickname { get; set; }
 public string url { get; set; }
 public string description { get; set; }
 }
 public class CustomFields
 {
 }
 public class Post
 {
 public int id { get; set; }
 public string type { get; set; }
 public string slug { get; set; }
 public string url { get; set; }
 public string status { get; set; }
 public string title { get; set; }
 public string title_plain { get; set; }
 public string content { get; set; }
 public string excerpt { get; set; }
 public string date { get; set; }
 public string modified { get; set; }
 public IList<Category> categories { get; set; }
 public IList<Tag> tags { get; set; }
 public Author author { get; set; }
 public IList<object> comments { get; set; }
 public IList<object> attachments { get; set; }
 public int comment_count { get; set; }
 public string comment_status { get; set; }
 public CustomFields custom_fields { get; set; }
 }
 public class Query
 {
 public bool ignore_sticky_posts { get; set; }
 }
 public class ClassWebsiteposts
 {
 public string status { get; set; }
 public int count { get; set; }
 public int count_total { get; set; }
 public int pages { get; set; }
 public IList<Post> posts { get; set; }
 public Query query { get; set; }
 } 
 class Program
 {
 static void Main(string[] args)
 {
 string url = "http://www.eniskurtayyilmaz.com/api/get_posts/";

 HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
 string jsonValue = "";
 using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
 {
 StreamReader reader = new StreamReader(response.GetResponseStream());
 jsonValue = reader.ReadToEnd();
 }

 ClassWebsiteposts websitePosts = JsonConvert.DeserializeObject<ClassWebsiteposts>(jsonValue); 
 }
 }
}

Result.

All of source code for downloading  http://download.eniskurtayyilmaz.com/csharpcornerarticle.rar
Enis Kurtay YILMAZ

[Nasıl Yapılır] C# ve Xamarin ile Android üzerinde Keylogger çalışması (Gelen & Giden Çağrılar, Gelen Mesajlar)

Herkese tekrardan merhaba.

Bu aralar Android’e merak salmış vaziyetteyim.

Üniversite yıllarında yazdığım masaüstü uygulaması olan Muhbir – Informant için, gelen fazlaca talepler doğrultusunda mobil platforma entegre etmeye karar verdim. Prototip halini yazdım ve hatta geçen hafta Makros Bilgisayar adlı bilişim firması ile kurumsal anlamda satışı için anlaşma sağladım. Projeme destek oldular ve daha geniş kapsamlı ele aldık yazılımı. Önümüzdeki aylarda yeni ismiyle beraber ve daha kurumsal bir yapıda; yazılımın yeni özellikleriyle karşınıza çıkacak.

Aldığımız kararlar doğrultusunda hukuki anlamda ne kullanıcılarımızın ne de firmamızın sıkıntı yaşanmaması adına bireysel müşterilere değil, kurumsal firmalara satışını gerçekleştirmeye karar verdik. Çünkü bireysel kullanıcılar; kişisel bilgisayarlarına kuracaklarını iddia etseler de üçüncü bir kişinin bilgisayarına gizli kurduğu takdirde yasal sorumluluk tamamen kendisine aittir. Kaldı ki hiçbir şekilde yazılımı yazan sorumlu tutulamadığı gibi sadece şahitlik bakımından davaya müdahil olmaktadır. Çünkü yazdığım yazılımda sözleşmede tüm sorumluluk belirtilerek kullanıcı onaylayarak kurulum işlemini tamamlayabilmekteydi.

* * *

Bildiğiniz üzere Microsoft’un yaklaşık bir hafta kadar önce Xamarin’i satın alarak, daha iyi geliştirmeler yapacağını umduğum bu teknoloji sayesinde; Java öğrenmeden .Net ortamında kodlarınızı mobil platforma entegre edebilme imkanına sahipsiniz.

Xamarin’den bahsetmek gerekirse aslında bir bileşendir. Mono ile gelen bir teknoloji olmasına rağmen, adı günümüzde çok sık duyulmaya başlandı. Microsoft 2011 yılından beri bu teknolojiyi yakından izliyor ve şu ana kadar yapılan resmi açıklamalara göre 82 milyon dolar kadar bir yatırım yaptı. VS 2015 (Visual Studio) kullananlar bilirler ki Xamarin’i yeni projeler geliştirdiğimizde sol framede görebiliyorduk. Team Service veya Azure entegrasyonuyla da inceleme fırsatımız vardı. Gün geldi çattı ve Microsoft mobil platformda başarılı olmak için kendi renklerine katmak istedi, geçen hafta resmi olarak satın aldı.

.Net ortamında hep uygulama geliştirenler için oldukça ideal ve mobil platformlar için başlangıç seviyesi olabilir; ancak bir Java kadar rahat değil, bunu baştan söylemem gerekir. Çünkü optimize ve performans bakımından oldukça başarı geliyor bana Java. Yani Java, Android’te başarılı uygulama geliştirmek isteyenler için birebir.

“Ben .Net kullanırım, başka bir şey kullanmam” diyenleri de anlamam. Yenilik istiyorsak, algıyı açmak istiyorsak ve yeni diğer teknolojileri değerlendirme ihtiyacı doğurur, ki hangisi daha iyi hangisi kötü ayırt edebilelim. “.NET’ten şaşmam!” diyorsan, şuraya alalım sizi [1].

Microsoft’un Xamarin başarısını ise ileri zamanlarda göreceğiz. Yapılan resmi açıklamalara göre Nisan aylarında gelecek yeniliklerle performans bakımından oldukça daha ileri seviyeye çekileceğini belirtti. Merakla bekliyoruz efendim.

Şimdi gelelim bizim konuya..

* * *

Sizlere bu makaleyi video şeklinde çekip, en baştan nasıl yaptığımı göstermek isterdim ancak bu işlem için çok geç. Xamarin nasıl kurulur, nasıl debug modda telefon çalıştırılır, driverların kurulumu falan filan hiç Amerika’yı yeniden keşfetmeye gerek yok. Yeniden Windows kurulum ihtiyacım olduğunda elbet çeker, bu makalenin ilgili yerinde paylaşırım; sizlerde görmüş olursunuz.

Ben doğrudan kaynak kodlara, Xamarin’in genel yapısını ve bu işin püf noktasını göstermeye çalışacağım. Çünkü Xamarin ile alakalı araştırmalar yaptığımda, evet benden önce birileri “Gelen & Giden çağrıları” gösteren uygulamalar yazmışlar, hatta “Anında gelen & giden mesajları göstermeyi” bile yapmışlar 🙂

Ama bir kişi de, “Mevcut olan mesajları bulmayı” yazmamış, işte burada ben devreye giriyorum.

Hadi başlayalım.

* * *

Sisteminizde kurulu olması gerekenler:

  1. Visual Studio 2015, 2017 (Bu proje 2015 Enterprise içerisinde gerçekleştirildi)
  2. Xamarin Studio
  3. Kendi Android telefonunuzda denemeyi düşünüyorsanız, ilgili telefonun driverlarının yüklü olması.

İlk yapmanız gereken VS 2015’te yeni bir proje oluşturmak, ilgili adımlar New Project ->Visual C# -> Android -> Blank App (Android)

Resim 1

Yeni proje ekledikten sonra, Resim 1’de görüldüğü gibi Solution Explorer’da ilgili alanlar gözükecektir.

Şimdi Xamarin’de uygulama geliştirmenin esas noktasına gelelim.
Layout ve Class’lardan bahsedelim.

Layout, aslında uygulamamızdaki tasarımıdır, katmanıdır. Yani uygulamaya eklemek istediğimiz nesneleri, araçları, resimleri veya yazıları burada yaparız. Default olarak “Main.axml” gelecektir. İçerisini açtığınızda varsayılan olarak eklendiğini göreceksiniz. Layout -> Main.axml yönergelerini takip ederek, ilgili axml dosyasına çift tıklamanız yeterlidir Solution Explorer üzerinden.

Resim 2

Resim 2’de gördüğünüz ve bir bakışta anlayacağınız üzere, bu bir basit “Kaç defa tıklandığını” gösteren bir uygulama. Klasik Hello World işte 😉

Peki bu tasarımı oluşturan asıl kodlara nerede?
İşte burada devreye XAML devreye giriyor. XML yapısına benzer, WPF ile tanıdığımız özellik var. Resim 2’in sol alt köşesinde bulunan Desing | Source kısmı dikkatinizi çekmiştir. Source’a tıklayalım ve görelim bu tasarımı oluşturan ilgili kodlara.

Resim 3

Resim 3’te görüldüğü üzere bir XML yapısından esinlenmiş ve ilgili butona ait nitelikler tanımlanmış. Yükseklik boyutu, içerisindeki metin, name (id) gibi alanlar tanımlı.

Burada dikkatinizi çekmesini istediğim şey, id alanı. Birazdan göreceğimiz Resim 4’te, bu buton nesnesine id üzerinden erişeceğiz. Burada Id yani Name kısmı MyButton diye geçmekte. Bir nesneye ID tanımlamak için @+id/Nesneİsmi mantığı kullanılmış.

Şimdi Solution Explorer’da yer alan MainActivity.cs dosyasına çift tıklayalım. Bu formun kullanıcıya gösterilmesi ve butona tıklandığında ne yapması gerektiğini ifade eden alanları inceleyelim.

Resim 4

Resim 4’te görüldüğü üzere kodlar gene hazır default olarak gelmiş ve Main.axml içerisinde yer alan butona tıklandığında yapılacak işlemler tanımlanmış.

Uygulamadaki MainActivity aslında bizim kod alanımızdır. Yani classlar üzerinden formdaki nesneye erişeceğiz, ilgili eventları, tanımlamaları burada yaparak çalışmasını istediğimiz şeyleri burada yapacağız.

Dikkatinizi çekerse Override edilmiş bir void içerisinde base’in altına yazılmış asıl kodlar.

SetContentView(Resource.Layout.Main): Uygulamamızın ilk çalıştırıldığında hangi formun ekrana geleceğini ifade eder. Masaüstünde formlarla uygulama yazan arkadaşlar Application.Run() özelliğini hatırlayacaktır. Mantık aynıdır.

Formdaki nesneye ise FindViewById ile ulaşmaktayız ve değişken olarak tanımladığımız bir buton nesnesine atanmış Resim 4’te.

Button button = FindViewById<Button>(Resource.Id.MyButton);

Yukarıdaki kod ile button adlı oluşturduğumuz Button değişkenine, Layout içerisinde yer alan buton nesnesine ulaştık. Buradaki en önemli etken ID’ye ulaşmaktır ve axml içerisinde tanımlı ilgili butonun ID’sinin MyButton olmasıdır.

button.Click += delegate { button.Text = string.Format("{0} clicks!", count++); };

Buradaki kodlarda ise layout içerisinde yer alan butona tıklandığında, hangi işlemi gerçekleştireceğini delegate ile tanımlamıştır. Yani bu kodlar derlenecek ve butonun Click event’ı çalıştığında ilgili delegate arasında yazdığımız kodlar aktif olarak, ilgili işlemi gerçekleştirecektir.

* * *

Mesajları okumak için örnek teşkil etmesi adına prototip yapabileceğimiz uygulama yazacağım. Yeni bir proje oluşturdum ve adını EKY.Mobile koydum.

Resim 5’teki gibi EKY.axml Layout’u oluşturdum olacaktır (Layout klasörüne sağ tıklayıp -> Add -> New Item dedikten sonra adını EKY.axml diye değiştirmeniz yeterli). XAML kodlarını Source alanına geçerek, kopyala/yapıştır şeklinde de otomatik gerçekleştirebilirsiniz:

Resim 5
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
    <EditText
        android:id="@+id/editText"
        android:layout_width="fill_parent"
        android:layout_height="198.0dp"
        android:textAlignment="viewStart" />
    <Button
        android:text="Button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:id="@+id/buttonEKY" />
</LinearLayout>

Buraya kadar işlemimiz form ekranımızın tasarımıydı.

Xamarin’de eğer Android’in bazı özelliklerinden yararlanmak adına API’lerini kullanarak çalışmak istiyorsanız, yetkilendirme tanımlamanız gerekmektedir. Örneğin şimdi biz bu uygulamamızda mesajları okumak, telefona gelen kayıtları görüntülemek istiyorsak; bunun için özel izinleri uygulamamızda tanımlamamız gerekmektedir.

Bu işlemi Solution Explorer üzerinden, ilgili projemizin Properties kısmından yapıyoruz.
Android Manifest sekmesinde, Required permissions alanlarından Resim 6’te yer alan alanlar seçilmelidir.

Resim 6

Şimdi gelelim kodlara.

Direk doğrudan kodları, MainActivity.cs içerisinde yer alan alana yapıştırmanız veya kendinize göre düzenlemeniz yeterlidir.

using System;
using Android.App;
using Android.Content;
using Android.Runtime;
using Android.Views;
using Android.Widget;
using Android.OS;
using Android.Webkit;
using Android.Provider;
using System.Collections.Generic;
using Java.Text;
 
namespace EKY.Mobile
{
    [Activity(Label = "EKY.Mobile", MainLauncher = true, Icon = "@drawable/icon")]
    [IntentFilter(new string[] { "android.provider.Telephony.READ_SMS" }, Priority = (int)IntentFilterPriority.HighPriority)]
    public class MainActivity : Activity
    {
 
        protected override void OnCreate(Bundle bundle)
        {
            base.OnCreate(bundle);
 
            // Set our view from the "main" layout resource
            SetContentView(Resource.Layout.EKY);
 
            // Get our button from the layout resource,
            // and attach an event to it
 
            Button button = FindViewById<Button>(Resource.Id.buttonEKY);
 
            button.Text = "GİT!";
            button.Click += delegate
            {
                //Gelen son 10 çağrıyı bulur. 
                //Değiştirmek için querySorter değişkeninde yer alan limit 10 kısmını değiştirmek yeterli
                var editText = FindViewById<EditText>(Resource.Id.editText);
                editText.Text = "http://eniskurtayyilmaz.com";
                editText.Text = "Gelen çağrılar:" + "\n";
                string queryFilter = String.Format("{0}={1}", CallLog.Calls.Type, (int)CallType.Incoming);
                string querySorter = String.Format("{0} desc limit 10", CallLog.Calls.Date);
                Android.Database.ICursor queryData = ContentResolver.Query(CallLog.Calls.ContentUri, null, queryFilter, null, querySorter);
                while (queryData.MoveToNext())
                {
                    editText.Text += queryData.GetString(queryData.GetColumnIndex(CallLog.Calls.Number)) + "\n";
                }
 
                //Giden son 10 çağrıyı bulur
                editText.Text += "Giden Çağrılar:" + "\n";
                queryFilter = String.Format("{0}={1}", CallLog.Calls.Type, (int)CallType.Outgoing);
                querySorter = String.Format("{0} desc limit 10", CallLog.Calls.Date);
                queryData = ContentResolver.Query(CallLog.Calls.ContentUri, null, queryFilter, null, querySorter);
                while (queryData.MoveToNext())
                {
                    editText.Text += queryData.GetString(queryData.GetColumnIndex(CallLog.Calls.Number)) + "\n";
 
                }
 
                /* 
                    Gelen SMS'leri bulmak için gerekli alan.
                    Giden smsler için Query içerisine "Telephony.Sms.Outbox.ContentUri" yazmak yeterlidir.
                */
                editText.Text += "-------------" + "\n";
                Android.Database.ICursor c = ContentResolver.Query(Telephony.Sms.Inbox.ContentUri, new String[] { "address", "body", "date" }, null, null, null);
                while (c.MoveToNext())
                {
                    long unixDate = long.Parse(c.GetString(c.GetColumnIndex("date")));
                    DateTime start = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
                    DateTime date = start.AddMilliseconds(unixDate).ToLocalTime();
                    editText.Text += "Gönderen:" + c.GetString(c.GetColumnIndex("address")) + "\n";
                    editText.Text += "Mesaj:" + c.GetString(c.GetColumnIndex("body")) + "\n";
                    editText.Text += "Tarih:" + date.ToString() + "\n";
                    editText.Text += "-------------" + "\n";
                }
            };
        }
    }
}
 

Unutmamanız gereken bir diğer önemli konu ise ilgili yazılıma bulunduğu kod bloğunun, class başlangıcında yetki tanımlanmasıdır. Bu olmadan mesajları okumayı aklınızdan bile geçirmeyin 🙂 (Tecrübeyle sabittir)

[IntentFilter(new string[] { "android.provider.Telephony.READ_SMS" }, Priority = (int)IntentFilterPriority.HighPriority)]

Uygulamayı cep telefonunda çalıştırdıktan sonra, bendeki Screenshot’larını da sizlerle paylaşayım Resim 7-8-9):

Resim 7
Resim 8
Resim 9

Bu makalede geçen bütün kodları github adresimde bulabilirsiniz:
https://github.com/eniskurtayyilmaz/EKY.Mobile-Android-Keylogger–Prototype-

Bu makale yazılırken kullanılan yardımcı şarkılar [2]

Bir sonraki makalede görüşmek üzere.

Enis Kurtay YILMAZ

JSON nedir ve C# ile JSON kullanımı

Merhaba dostlar.

Aslında sizlere türkçe kaynaklarda yarım yamalak anlatılan Django makalelerini, birebir çeviri yaparak seslenecektim. Ancak şimdilik mevcut projelerimizden dolayı bunu başka bir bahara bırakarak, sizlere “JSON nedir ve C# ile JSON kullanımı” makalesi ile sesleniyorum.

Bu makalede neleri öğreneceksiniz?

  1. JSON Nedir?
  2. C# ile JSON Verileri Oluşturmak
  3. C# ile JSON Verilerini Okumak

Hadi başlayalım!

 

1. JSON Nedir?

Aslında JSON (Javascript Object Notation), JavaScript tarafından bize sunulmuş bir nimettir. Türkçesi ise “Javascript Nesne Gösterimi”dir. Wikipedia‘ya göre “insanlar tarafından okunabilen bir veri değişimi biçimidir” denilse de, insanlar dediği kısım bence yazılım geliştiriciler içindir.

JSON bir ağaç yapısıyla çalışır ve XML mantığına benzerdir (kısmende benzer değildir). Ağaç yapısından ve kendisinin sunduğu özellikten dolayı, XML’den daha kolay ve daha hızlı işleyebilmekteyiz. Bağımsızdır, kısadır ve anlaşılabilir bir yapıdadır. XML ile karşılaştıracak olursak, benzerliğini göreceksiniz (Şekil 1).

Şekil 1
Şekil 1

Yukarıda örnek göstermek amacıyla, “Mersin Üniversitesine” ait üç öğrencinin JSON ve XML türlerine göre bir örneği mevcuttur. Dikkatinizi çekerse JSON daha kısa ve daha anlamlıdır. Köşe parantezlerin [] birer dizi olduğunu, süslü parantezlerin {} ise {“anahtar”:”değer”} mantığı taşıdığını görebilirsiniz.

Peki JSON bize nerede işe yarayacak? Eğer sizin tarafınızdan oluşturulmamış ikinci bir kaynaktan veri alışverişinde bulunmak isterseniz, JSON hayat kurtarır nitelikte olacaktır. Örneğin Twitter API’si kullanarak bir geliştirmek isterseniz karşınıza JSON çıkacaktır. Hatta pek çok sistem JSON veri paylaşımında bulunmaya başlamıştır. Google’da Free Json API yazarsanız, istemediğiniz kadar JSON ile karşılaşabilirsiniz.

Eğer XML ile uğraştıysanız, JSON’ın Key ve Value mantığı gibi bir durumunun olduğunu göreceksiniz. Nedir bu Key’leri ve Value’ları, yukarıdaki örnekten yola çıkalım ve örnek JSON kodumuzu Şekil 2’de verelim.

Şekil 2
Şekil 2

“universite” bir anahtardır (Key), “Mersin” ise değeridir (yani Value).
“ogrenciler” bir anahtardır ve değeri aslında bir dizidir. Çünkü değer içerisinde birden çok veri vardır. İnceleyecek olursak bu diziyi, içerisinde üç adet “isim” diye anahtarlar vardır. Bu anahtarların da aldığı değerler (Kurtay, Serdar, Şafak) vardır.

{“nekadar”:”100 Lira”} örneği de bir JSON’dur. “nekadar” ifadesi anahtar iken “100 Lira” ise değeridir. Yani JSON’un temel kalıbı {“key”:”value”} şeklindedir.

Temel bilgileri öğrendiğimize göre, gelelim en baba soru veya sorulara..
Bu JSON’ı nasıl oluşturacağız? Bunları tek tek Şekil 2’deki gibi mi elimizle biz mi yazacağız?

El-cevap çok sevdiğim dostumun deyişi ile “amelelik yapmaya gerek yok, vardır bir yolu”..

 

2. C# ile JSON Verileri Oluşturmak

Öncelikle Visual Studio’da bir Console uygulaması açalım. Solution Explorer üzerinden References kısmına sağ tıklayarak, JSON için ilgili kütüphaneyi kuralım (Şekil 3 ve Şekil 4).

Şekil 3
Şekil 3
Şekil 4
Şekil 4 – “JSON” diye arayınız, Newtonsoft.Json seçiniz, Install ile kütüphaneyi kurunuz.

Şu ana kadar yaptıklarımızı toparlayacak olursak, JSON için temel bilgilerini öğrendik ve bunu kendi C# uygulamamız için temel kütüphanesi kurmayı gerçekleştirdik. Gelelim uygulama yazılımına. Her şeyden önce tabii ki kütüphanemizi kurduysak, JSON için gerekli using tanımını yapmak lazım. Kod bloğumuzun en üst kısmına gerekli tanımı yapıyoruz.

using Newtonsoft.Json;

Şekil 2’deki JSON kod örneğini bizim yazılımımıza entegre etmek için öncelikle sınıflar ve Generic sınıflarla çalışacağız. Eğer hakkında bilgi sahibi değilseniz, Google amca buyurunuz.

Eğer C# uygulaması için yukarıdaki JSON örneğinin anahtarlarından (yani Key) bir class oluşturmakta zorlanıyorsanız, şu sitede otomatik class oluşturabilirsiniz C# için, buyurunuz. (Şekil 5 ve Şekil 6)

Örnek JSON Kodu

{
"universite":"Mersin",
"ogrenciler":[
    {"isim":"Kurtay"},
    {"isim":"Serdar"},
    {"isim":"Şafak"}
]}
sekil5
Şekil 5 – JSON Kodunu yapıştırıp SUBMIT edelim.

 

sekil6
Şekil 6 – Sayfanın aşağısındaki oluşturan kodu kopyalayalım ve projemize geçelim.

Kendi kodumuzu kopyalarken kodda yer alan Example olan kısmı, kendi projemizde UniversiteOgrencileri olacak şekilde değişip yapıştırıyorum (Şekil 7).

Kod

public class Ogrenciler
    {
        public string isim { get; set; }
    }
 
    public class UniversiteOgrencileri
    {
        public string universite { get; set; }
        public IList ogrenciler { get; set; }
    }
Şekil 7
Şekil 7

Bu arada Şekil 7’deki gibi using kısmını değiştirmeyi unutmayınız..

 

Sıra geldi ilgili Class’ı kullanarak yeni verileri JSON gibi oluşturmaya..

Generic class ile ilgili alanlara atamayı yaptıktan sonra aslında tek yapmamız gereken, JsonConvert.SerializeObject() metodu ile JSON oluşturmaktır. Gelsin kodlar..

            UniversiteOgrencileri universiteOgrencileri = new UniversiteOgrencileri();
            universiteOgrencileri.universite = "Koç";
 
            List p = new List();
            Ogrenciler ogrenci1 = new Ogrenciler{ isim = "Şafak" };
            Ogrenciler ogrenci2 = new Ogrenciler{ isim = "Dilara" };
            Ogrenciler ogrenci3 = new Ogrenciler{ isim = "Can" };
 
            p.Add(ogrenci1);
            p.Add(ogrenci2);
            p.Add(ogrenci3);
            universiteOgrencileri.ogrenciler = p;
 
            string json = JsonConvert.SerializeObject(universiteOgrencileri);
            System.Console.WriteLine(json);

Çıktıyı görelim (Şekil 8).

Şekil 8
Şekil 8

Oluşturma işlemimiz başarılı! Format biçimini beğenmedi iseniz, Google amca sayesinde bunu biçimsel hale getirebilirsiniz, buyurunuz. (Şekil 9)

sekil9
Şekil 9

3. C# ile JSON Verilerini Okutmak

Bence en basiti burası. Eğer JSON’dan elde ettiğiniz bir veri varsa, bunu aktarmayı tek kod ile gerçekleştirebilirsiniz. Hele Class’ınızda JSON’a uygunsa, tek kodunuz sizi bekliyordur.

İşimizi zorlaştıralım ve bir örnek senaryo düşünelim. Diyelim ki www.xyzuniversitesi.com/ornek.json adresinden bir üniversiteye ait öğrencilerin bilgilerini okumaya yarayan bir uygulama yazacaksınız.

İlgili öğrenci bilgileri de Şekil 9’daki gibi olsun.

sekil9
Şekil 9

İhtiyacımız olan ilk şey JSON’dan gelecek veridir. Çünkü öğrenci verileri burada tutulmaktadır. Bize de veriler lazımdır. Algoritma şeklinde düşünürsek ilk ilgili siteye talep oluşturmamız, ardından talep sonucu elde ettiğimiz değeri bir değişkene aktarmamız gerekmektedir. Aşağıdaki kod ile ilgili siteye JSON verisini elde etmek için talep oluşturalım, ardından elde ettiği verileri jsonVerisi adlı değişkene aktaralım.

            string url = "<a href="http://www.eniskurtayyilmaz.com/ornek.json" target="_blank">www.xyzuniversitesi.com/ornek.json</a>";
 
            HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
            string jsonVerisi = "";
            using (HttpWebResponse response = request.GetResponse() as HttpWebResponse)
            {
                StreamReader reader = new StreamReader(response.GetResponseStream());
                //jsonVerisi adlı değişkene elde ettiği veriyi atıyoruz.
                jsonVerisi = reader.ReadToEnd();
            }

Bunu yazdıktan sonra aman ha, using System.IO; ve using System.Net; tanımlarını yapmayı unutmayalım!

Neyse.. İlgili JSON için Class ve Generic class oluşturmayı öğrenmiştik yukarıda bir yerlerde. Dikkat ederseniz aynı anahtar (Key) üzerinden çalışmaktayım, sadece değerler (Value) farklıdır. Bu yüzden ilgili Class’ı silmemize gerek kalmayacak şimdilik bu uygulamada. Eğer siz başka bir çalışma yapıyorsanız, siz kendiniz bayağı yukarıda bahsettiğim gibi otomatik oluşturabilecek sitelerden faydalanarak bu işlemi yapabilirsiniz.

İlgili JSON’daki verileri kendi uygulamamızdaki Class’a aktarıp, bundan sonra istediğimizi yaptırabiliriz. Dedim ya tek kod, buyurunuz.

UniversiteOgrencileri universiteOgrencileri = JsonConvert.DeserializeObject(jsonVerisi);

Yukarıda “universiteOgrencileri” adlı UniversiteOgrencileri türü olan Class’a, DeserializeObject() Metodu ile ederek elde ettiğimiz verilerin hepsini düzenli olarak işledik. Tabi burada önceden bu hiyerarşiye uygun oluşturduğumuz Class önemli olan.

E hadi bir sonraki makalede görüşmek dileğiyle.

Bu makalede yer alan tüm kodlar için : https://github.com/eniskurtayyilmaz/csJsonKullanimi

Enis Kurtay YILMAZ

Ergenekon Çıkmazı

Yazsam mı, yazmasam mı diye çok düşündüm ve bir karara vararak bunları yazıyorum.

***

Bildiğiniz üzere ERGENEKON davası hâlâ devam ediyor.
Gerek gazetelerden ve haberlerden, doğru veya yanlış bir şekilde bilginizin olduğu düşünüyorum.

Sizlere “Ergenekon terör örgütüdür” veya “Ergenekon masumdur” demeyeceğim.
Sizlere İddianamede de söz konusu olan bilgisayardaki bir dosyaya ait tarih bilgisinin nasıl değiştirileceğini göstereceğim. Bunu C# programlama dili ile gerçekleştireceğim.

İddianamede, bilgisayardaki bir Word dosyasının 12 Şubat 2003 tarihinde oluşturulduğu bilgisi yer alıyor. Söz konusu olan Word dosyasında Calibri fontu kullanılmış. Halbuki Microsoft bile açıklama yaptı, bu font Office  2007’de ilk kullanılmaya başlandı diye.. [kaynak]

Neyse biz gelelim bir dosyanın tarih bilgisinin nasıl değiştirildiğine.
Bilgisayarımda oluşturduğum Word dosyasının oluşturma tarihini ve diğer tarih bilgilerini nasıl değiştirildiğini görelim.

Masaüstüne sağ tıklıyorum ve yeni bir Word belgesi oluşturuyorum.
İsmine de ERGENEKON diye belirliyorum

Bu Word belgesine sağ tıklayıp, Özellikler diyoruz. Özellikler kısmında bu dosyanın Oluşturma, Değiştirilme ve Erişim tarihlerinin bilgisini görmekteyiz. Aşağıdaki resimde bu dosyanın tarih bilgilerinin 21 Mayıs 2013 şeklinde olduğunu görüyoruz.

Şimdi C# Programlama dili ile bu dosyanın tüm tarih bilgilerini, 12 Şubat 2013 şeklinde ayarlayacağım.
Visual Studio 2012’yi açıyorum ve aşağıdaki resimde gördüğünüz gibi kodları yazıyorum 
Programımı START edip, çalıştırıyorum. Ekrana “İşlem Başarılı” yazıyor.

Şimdi tekrar bakalım, dosyamızın tarih bilgileri değişmiş mi?
Word dosyasına tekrar sağ tıklıyoruz ve özellikler diyoruz.

Gördüğünüz gibi Word dosyamızın tarihini değiştirdim.
Bu okuduğunuz yazıda bir dosyanın tarih bilgisinin nasıl değiştirildiğini öğrendiniz.

Bunu kendi bilgisayarınızda denemeniz adına sizlere tekrardan bir yazılım yazıyorum.
Yazdığım yazılımda tarih/saat bilgilerini ve hangi dosyanın değiştirileceğini siz belirleyin.
İndirmek için : http://www.bilgihirsizligi.org/download/ErgenekonCikmaziApp.rar

Yazılımdan görüntü

Enis Kurtay YILMAZ

Visual Studio ile “Settings” Dosyası Kullanımı

Merhaba dostlar.

Bugün sizlere Visual Studio ile “Settings” Dosyası Kullanımını göstereceğim.

*Not: Facebook üzerinden okuyanlar için: www.eniskurtayyilmaz.com/visual-studio-settings-kullanimi/

Settings”, adından da anlaşılacağı gibi ayarlarla ilgili bir fonksiyon. Bu makalede Settings dosyasını, yazdığımız herhangi bir programdaki ayarları tutmak veya bir takım verileri saklamak için kullanacağız. Bu dosya, ihtiyaç duyulan uygulama bilgilerini yada kullanıcı ayarlarını da temsil edebilir. Örneğin "Settings" ile bir kullanıcı ismini saklayabilirsiniz, bir ConnectionString saklayabilirsiniz veya başka bir türde veri saklayabilirsiniz.

Visual Studio'yu çalıştıralım. Yeni bir proje oluşturarak, C# dilinde bir Console Application tanımlayalım ve projemize isim verelim.

Yeni proje açtıktan sonra, sağ tarafta bulunan Properties yazan yere çift tıklıyoruz.

Açılan yeni pencerede Settings alanını buluyoruz. Aşağıdaki resim gibi bir yazı göreceksiniz. Onun üzerine çift tıklıyoruz.

* Not : "Windows Application" uygulamasıyla başlattığınızda aşağıdaki resim gibi herhangi bir yazı gelmez. 

Evet karşımıza 4 adet alan geliyor. Bu alanlar hakkında açıklama yapalım.

  • Name: Çalışma zamanında ilgili ayarın değerine erişmek için kullanılan addır.
  • Type: Ayarları temsil eden .Net Framework tipidir.
  • Scope: Çalışma zamanında ayarlara nasıl erişileceğini temsil eden özelliktir.
  • Value: Ayarlara erişildiğinde geriye döndürülecek olan degerdir.

Şimdi resimli örneklerde görülen şekilleri veya yazılan şeyleri sırasıyla yapalım.

  1. Name kısmında yazan “Setting” ifadesini, “Mesaj” olarak değiştiriyoruz
  2. Type kısmını “String” diye seçiyoruz
  3. Value kısmını “Mesaj” içerisindeki değer” diye değiştiriyoruz.

Evet. Sıra geldi şimdi bu yazdığımız “Mesaj” değerini, programda görüntülemeye. Açık olan “Program.cs” dosyamıza geliyoruz. Main kısmına hemen “Console.WriteLine” yazarak, “Properties.Settings.Default.Mesaj” parametresini çağırıyoruz. “Mesaj” değerimizi ve ardından “Console.ReadKey();” diye de yazdıktan sonra çalıştırıyoruz programımızı.


 

Evet dostlar, aslında Settings konusu bu kadar basit ve kullanımı kolay. Settings dosyası programın bulunduğu klasörde “config” olarak otomatik eklenir. İçinde değiştirmek istediğiniz değerler varsa veya görmek istiyorsanız, not defteri ile açıp uygulayabilirsiniz.

Eğer ConnectionString yazmak istiyorsanız, “Type” alanına girip, en altta bulunan “(ConnectionString)” kısmını seçmelisiniz ve ardından Value kısmında çıkan butona tıklamalısınız, sonra da gerekli ayarları tanımlamalısınız.

 

Bu yazıda "Visual Studio ile 'Settings' Dosyası Kullanımını" öğrendik. Başka bir makalede görüşmek üzere, sağlıcakla kalın.

Enis Kurtay YILMAZ