יום שבת, 5 בפברואר 2011

Json Starting Guide C#

JavaScript Object Notation - Json

היא שיטה להעברת נתונים בין מחשבים , היא נכנסה לשימוש בשנת 1999  עם כניסת סטנדרטים חדשים ב Javascript ומאפשרת שליחה של אובייקטים מסוגים שונים בצורה נוחה וברורה , היא בעצם מתחרה ב XML כי היא יותר דומה ושימושית כשפת תוכנה כחלק משפות הפיתוח הקיימות, בנוסף היא תומכת ב Xml ומאפשרת המרה בניהם, אין ספק שהשפה תפסה תאוצה בשנים האחרונות במיוחד בכל הקשור למידע משתנה, Api ו Ajax , ומאפשרת עבודה נוחה במיוחד ב Framework 3 ומעלה עם  Linq, עצם העובדה שיש לה תמיכה מרובה בשפות שכמעט זהה ל Xml מאפשרת המרה נוחה לאובייקטים בשפות שונות וחוסכת לנו תהליכי המרה מסורבלים.



המבנה של Json הוא פשוט ומורכב מ 2 אובייקטים מרכזיים : אובייקט של מידע, ומערכי מידע.

 אובייקט:
{"name":"value"}
כל אובייקט מידע מתחיל ונסגר עם סוגריים מסולסלים וגרשיים, אח"כ יש את שם האובייקט יש הפרדה בעזרת נקודתיים ואח"כ את ערך האובייקט, הערך יכול להיות בצורות של String,Boolean,Number,Null

מערך:
{"data":[{"name":"value"},{"name":"value"}]}
מערך של אובייקטים מתחיל ונסגר בסוגריים מרובעיים, הוא מכיל אובייקטים , ובין כל אובייקט חייב שהיה פסיק.

{"data": [
 {
   "id": "2132232",
   "name":
             {
               "firstname":"proxytype",
               "lastname":"blog"
              },
  "location":
              {
                "zipcode", "43823",
                 "address": "blogger.com"
               },
    "vip":"true",
    "birthday":"2010-03-24T11:16:02+0000"
  }
]}
 קיימות מחלקות רבות לעבודה עם Json ותמיכה בשפות רבות:
Java,Python,Perl,.Net
המחלקה המפורסמת ל .Net היא Json.Net וניתנת להורדה:
תחילה יש לבצע Reference עבור המחלקה ואח"כ נתחיל בבניית האובייקט שנעבוד איתו עם ה Json , ניסיתי לבנות אובייקט יחסית מורכב שיכיל בתוכו מספר אספקטים שונים בסביבת .Net הוא מכיל בתוכו הורשה מאובייקט אחר ובנוסף קיים בו מופע של אובייקט נוסף ומספר פרמטרים נוספים במטרה לסבך את העניינים.

Person
הוא יורש את אובייקט Name שמכיל בתוכו 2 מחרוזות אחת של שם פרטי ואחת של שם משפחה, בנוסף יש בו מופע של אובייקט Location שמכיל Integer של Zipcode ומחרוזות של Address, בתוך אובייקט Person יש שדות נוספים כמו Integer של ID, תאריך עבור Birthday וערך Boolean עבור Vip.

public class name
{
  [JsonProperty]
  public string Firstname;
  [JsonProperty]
  public string Lastname;
}

public class location
{
  [JsonProperty]
  public int ZipCode;
  [JsonProperty]
  public string Address;
}

public class person : name
{
  [JsonProperty]
  public location mylocation = new location();

  [JsonProperty]
  public int Id;

  [JsonProperty]
  public bool Vip;
 
  [JsonProperty]
  [JsonConverter(typeof(IsoDateTimeConverter))]
  public DateTime Birthday;

}

 [JsonProperty]
חובה להוסיף מעל כל ערך שאנו רוצים להשתמש בו עם Json.

[JsonConverter(typeof(IsoDateTimeConverter))]
המרה של תאריכים ע"י JsonConverter.

ועכשיו אחרי שיש לנו את האובייקט נבנה לנו מחלקה שקורא וממירה ל Json , תהליך העבודה עם Json מחולק ל 2 קבוצות , קבוצת כתיבה אובייקט ל Json וקבוצת המרה בין Json לאובייקט.

פונקציות ממירות:
public person json_reader()
{
   person myperson = new person();
   string json = @"{ ""mylocation"": { ""ZipCode"": 34434, ""Address"": ""blooger.com"" }, ""Id"": 0
   , ""Vip"":   true, ""Birthday"": ""2011-02-05T00:00:00+02:00"", ""Firstname"": ""proxytype"", ""Lastname"":
   ""blog"" }";
   myperson = (person)JsonConvert.DeserializeObject(json,typeof(person));
   return myperson;
}
הפונקציה קוראת את המחרוזת json וממירה אותו ל Person.

public person[] json_array_reader()
{
   person[] myperson = new person[3];
   string json = @"[ { ""mylocation"": { ""ZipCode"": 34434, ""Address"": ""blooger.com"" }, ""Id"": 0,
   ""Vip"": true, ""Birthday"": ""2011-02-05T00:00:00+02:00"", ""Firstname"": ""proxytype"", ""Lastname"":
   ""blog"" }, { ""mylocation"": { ""ZipCode"": 34434, ""Address"": ""blooger.com"" }, ""Id"": 1, ""Vip"": true,
   ""Birthday"": ""2011-02-05T00:00:00+02:00"", ""Firstname"": ""proxytype"", ""Lastname"": ""blog"" },  
   { ""mylocation"": { ""ZipCode"": 34434, ""Address"": ""blooger.com"" }, ""Id"": 2, ""Vip"": true, 
   ""Birthday"": ""2011-02-05T00:00:00+02:00"", ""Firstname"": ""proxytype"", ""Lastname"": ""blog"" } ] ";
  
   myperson = (person[])JsonConvert.DeserializeObject(json, typeof(person[]));
   return myperson;
}
הפונקציה קוראת את המחרוזת json ומחזירה מערך של 3 Person.
 
פונקציות כתיבה:
public string json_Writer()

{
   myperson = new person();
   myperson.Firstname = "proxytype";
   myperson.Lastname = "blog";
   myperson.mylocation.Address = "blooger.com";
   myperson.mylocation.ZipCode = 34434;
   myperson.Vip = true;
   myperson.Birthday = DateTime.Now.Date;
   string json = JsonConvert.SerializeObject(myperson, Formatting.Indented);
   return json;
}
הפונקציה ממירה את האובייקט Person למחרוזת Json.

public string json_array_writer()
{
   person[] myarray = new person[3];
   for (int i = 0; i < myarray.Length; i++)
   {
      myarray[i] = new person();
      myarray[i].Firstname = "proxytype";
      myarray[i].Lastname = "blog";
      myarray[i].Id = i;
      myarray[i].mylocation.Address = "blooger.com";
      myarray[i].mylocation.ZipCode = 34434;
      myarray[i].Vip = true;
      myarray[i].Birthday = DateTime.Now.Date;
    }

    string json = JsonConvert.SerializeObject(myarray, Formatting.Indented);
    return json;
}

הפונקציה ממירה מערך של Person למחרוזת Json.
לסיכום:
Json נוחה יותר מ Xml ומאפשרת המרה מהירה וחסכונית בין Json לאובייקטים בקוד , היא חוסכת המון שורות קוד של המרות ובעצם מקצרת את תהליך הכתיבה וההמרה.

אין תגובות:

הוסף רשומת תגובה