تقييم الموضوع :
  • 0 أصوات - بمعدل 0
  • 1
  • 2
  • 3
  • 4
  • 5
JSON using C#.NET Part2
#1
بسم الله الرحمن الرحيم
((رب اشرح لي صدري ويسر لي امري واحلل عقدة من لساني يفقهوا قولي))

JSON using C#.NET Part2

كنا قد شرحنا في الجزء السابق JSON using C#.NET Part1 عن JSON من ناحية التعريف  والمعنى والاستخدام وايضا أنوع البيانات المعتمدة فيها.


في هذا الجزء سنوضح كيف تقوم بالتعامل مع ملف JSON بلغة C#.NET من ناحية قراءة ملف JSON من الانترنت وكذلك رفع ملف نص JSON الى الانترنت.

أولا يجب عليك اضافة مكتبة Newtonsoft من NuGet الى المشرع وذلك من خلاله نستطيع التعامل مع ملفات JSON.

هنالك الكثير من المكتبات تستطيع من خلالها التعامل مع JSON لكن نحن سنتعامل مع المكتبة التي ذكرناها سابقا.


أولا: اضافة المكتبة Newtonsoft :

بعد ان تقوم بانشاء مشروع جديد من نوع Console Application اتبع هذه الخطوات لاضافة مكتبة Newtonsoft :

1- 

2-

الى الان كل شي تمام. طيب نأتي الى كتابة الاكواد.

ثانيا: قراءة JSON string من الانترنت: سنقوم بقراءة بيانات الطقس من موقع yahoo من خلال ملف JSON من هذا الرابط: Yahoo weather api. ثم سنقوم بنسخ JSON string وتحويله الى Classes.


ثانيا: نقوم بعمل class جديد باتباع هذه الخطوات:
RightClick on project name->Add->Class->Add

ثم قم بمسح: 
PHP كود :
class Class1
    
{
 
   
بعد مسح اسم الكلاس مع مع الاقواس سيبقى لدينا فقط اسم NameSpace وبداخلها سنقوم بادراج نص JSON على شكل Classes باتباع واحدة من هاتين الخطوتين:


هنالك طريقتين لتحويل نص JSON الى Classes: 
1- استخدام موقع http://json2csharp.com 
قم بنسخ نص JSON الى الموقع واضغط على Generate ثم انسخ الكلاسات الى داخل الــ NameSpace

أو استخدام هذه الطريقة السهلة والسريعة:

2- من داخل بيئة Visual Studio قم بأتباع الخطوات التالية:
 Edit->Paste Special->Paste JSON as Classes
هذه الميزة تأتي فقط في حال كنت قد قمت بتنصيب Web Development اثناء تنصيب الــVisual Studio.

بعد عملية النسخ ستكون شكل الكلاسات داخل الـ NameSpace كالتالي:
PHP كود :
using System;

namespace 
ReadWriteJSON
{

 
   public class Rootobject
    
{
 
       public Query query getset; }
 
   }

 
   public class Query
    
{
 
       public int count getset; }
 
       public DateTime created getset; }
 
       public string lang getset; }
 
       public Results results getset; }
 
   }

 
   public class Results
    
{
 
       public Channel channel getset; }
 
   }

 
   public class Channel
    
{
 
       public Units units getset; }
 
       public string title getset; }
 
       public string link getset; }
 
       public string description getset; }
 
       public string language getset; }
 
       public string lastBuildDate getset; }
 
       public string ttl getset; }
 
       public Location location getset; }
 
       public Wind wind getset; }
 
       public Atmosphere atmosphere getset; }
 
       public Astronomy astronomy getset; }
 
       public Image image getset; }
 
       public Item item getset; }
 
   }

 
   public class Units
    
{
 
       public string distance getset; }
 
       public string pressure getset; }
 
       public string speed getset; }
 
       public string temperature getset; }
 
   }

 
   public class Location
    
{
 
       public string city getset; }
 
       public string country getset; }
 
       public string region getset; }
 
   }

 
   public class Wind
    
{
 
       public string chill getset; }
 
       public string direction getset; }
 
       public string speed getset; }
 
   }

 
   public class Atmosphere
    
{
 
       public string humidity getset; }
 
       public string pressure getset; }
 
       public string rising getset; }
 
       public string visibility getset; }
 
   }

 
   public class Astronomy
    
{
 
       public string sunrise getset; }
 
       public string sunset getset; }
 
   }

 
   public class Image
    
{
 
       public string title getset; }
 
       public string width getset; }
 
       public string height getset; }
 
       public string link getset; }
 
       public string url getset; }
 
   }

 
   public class Item
    
{
 
       public string title getset; }
 
       public string lat getset; }
 
       public string _long getset; }
 
       public string link getset; }
 
       public string pubDate getset; }
 
       public Condition condition getset; }
 
       public Forecast[] forecast getset; }
 
       public string description getset; }
 
       public Guid guid getset; }
 
   }

 
   public class Condition
    
{
 
       public string code getset; }
 
       public string date getset; }
 
       public string temp getset; }
 
       public string text getset; }
 
   }

 
   public class Guid
    
{
 
       public string isPermaLink getset; }
 
   }

 
   public class Forecast
    
{
 
       public string code getset; }
 
       public string date getset; }
 
       public string day getset; }
 
       public string high getset; }
 
       public string low getset; }
 
       public string text getset; }
 
   }




كما تلاحظون تم تحويل  JSON string الى Classes. و بهذه الطريقة سنقوم بعمل DeserializeObject لنفس JSON string الذي سنقوم بقرائته من الويب الى الــ Classes ليسهل التعامل مع عناصر ملف الــ JSON.

1- نأتي الى كود القراءة:

PHP كود :
using System;
using Newtonsoft.Json;
using System.Net.Http;

namespace 
ReadWriteJSON
{
 
   class Program
    
{
 
       static void Main(string[] args)
 
       {
 
           var cityName "kirkuk";
 
           var uri = @"https://query.yahooapis.com/v1/public/yql?q=select%20*%20from%20weather.forecast%20where%20woeid%20in%20(select%20woeid%20from%20geo.places(1)%20where%20text%3D%22" cityName "%2C%20ak%22)&format=json&env=store%3A%2F%2Fdatatables.org%2Falltableswithkeys";
 
           ReadJson(uri);
 
           Console.ReadKey();
 
       }

 
       async static void ReadJson(string uri)
 
       {
 
           using (HttpClient client = new HttpClient())
 
           {
 
               using (HttpResponseMessage resMessage await client.GetAsync(uri))
 
               {
 
                   using (HttpContent content resMessage.Content)
 
                   {
 
                       var jsonString await content.ReadAsStringAsync();
 
                       var jsonObject JsonConvert.DeserializeObject<Rootobject>(jsonString);
 
                       Console.WriteLine(jsonObject.query.results.channel.location.city);
 
                       Console.WriteLine(jsonObject.query.results.channel.astronomy.sunrise);
 
                   }
 
               }
 
           }
 
       }
 
   }


المهم هو هذا السطر:
PHP كود :
                       var jsonObject JsonConvert.DeserializeObject<Rootobject>(jsonString); 


هنا تم استخدام JsonConvert لعمل DeserializeObject لـ JSON string الى كلاس Rootobject حيث هذا الكلاس يعتبر الكلاس الاب الذي يتضمن على جميع الكلاسات الفرعية.


ومن خلال الــ Classes نستطيع الوصول الى أي Property بسهولة جدا كما هو موضح في سطريْ الطباعة داخل دالة ReadJson.


2- كود رفع بيانات الى الويب على شكل نص JSON:
لنفترض أننا نريد رفع معلومات ل 3 سيارات الى الويب. سنستخدم هذا الموقع http://posttestserver.com/post.php
 لرفع المعلومات كـ JSON string
سنقوم بانشاء الكلاس التالي:
PHP كود :
class Car
    
{
 
       public int Id getset; }
 
       public string CarName getset; }
 
       public int CarPrice getset; }
 
   

ثم نكتب هذه الدالة:
PHP كود :
async static void UploadJson(string uri)
 
       {
 
           var carList = new List<Car>
 
           {
 
               new Car
                
{
 
                   Id=1,
 
                   CarName="BMW",
 
                   CarPrice=230
                
},
 
                new Car
                
{
 
                   Id=2,
 
                   CarName="rr",
 
                   CarPrice=256
                
},
 
                 new Car
                
{
 
                   Id=3,
 
                   CarName="t",
 
                   CarPrice=266
                
}
 
           };
 
           using (HttpClient client = new HttpClient())
 
           {
 
               var json JsonConvert.SerializeObject(carList);
 
               using (HttpContent content = new StringContent(jsonEncoding.UTF8"application/json"))
 
               {

 
                   using (HttpResponseMessage resMessage await client.PostAsync(uricontent))
 
                   {
 
                       using (HttpContent c resMessage.Content)
 
                       {
 
                           var cs await c.ReadAsStringAsync();
 
                           Console.WriteLine(cs);
 
                       }
 
                   }
 
               }
 
           }
 
       

أهم نقطة هي في هذا السطر من الكود أعلاه:
PHP كود :
               var json JsonConvert.SerializeObject(carList); 

حيث سيتم تحويل المعلومات في  carList object الى JSON string.

قمت بطباعة الرسالة الواصلة لي من الويب لذا ستكون الناتج كالتالي:

PHP كود :
Successfully dumped 0 post variables.
View it at http://www.posttestserver.com/data/2017/08/10/10.39.101044041893
No Post body


وعند الذهاب الى الرابط الذي ظهر لنا في الناتج سنلاحظ المعلومات كـ JSON string كما في السطر المظلل. طبعا في كل تنفيذ سيختلف الرابط في الناتج.



اتمنى أني وفقت في ايصال المعلومة بصورة صحيحة رغم أني اخترصت الكثير.

المثال تجدونه في المرفقات.



الملفات المرفقة
.zip   ReadWriteJSON.zip (الحجم : 4.56 م ب / التحميلات : 68)
الرد }}}
#2
بارك الله فيك
و جزاك الله عنا خير الجزاء
سبحان الله اخذنا هذا الدرس على مدة ثلاث ايام اثناء الدورة و ما زلت احتاج للتعمق اكثر .
شكرا اخي سجاد
الرد }}}
تم الشكر بواسطة: Sajad , أبو نوره
#3
حياك الله اخي الطيب

اسأل الله لك التوفيق
الرد }}}
تم الشكر بواسطة: أبو نوره
#4
جزاك الله خير ،، كفيت ووفيت ،،
الرد }}}
تم الشكر بواسطة: Sajad , Sajad , أبو نوره , أبو نوره
#5
وجزاك بالمثل

شكرا لكم
الرد }}}
تم الشكر بواسطة: أبو نوره
#6
تسلم بارك الله فيك
الرد }}}
تم الشكر بواسطة: أبو نوره , Sajad , Sajad


المواضيع المحتمل أن تكون متشابهة .
الموضوع : الكاتب الردود : المشاهدات : آخر رد
  JSON using C#.NET Part1 Sajad 0 2,373 08-08-17, 11:35 PM
آخر رد: Sajad

التنقل السريع :


يقوم بقرائة الموضوع: بالاضافة الى ( 1 ) ضيف كريم