تبدیل JSON و XML به کلاس های #C با استفاده از ویژوال استودیو

دوشنبه 6 دی 1395

ویژوال استودیو 2015 مجموعه ای از ویژگی ها را فراهم میکند که شما را سازنده تر مینماید. یکی از ویژگی هایی که تازه کار ها آن را فراموش میکنندتبدیل JSON و XML به کلاس های سی شارپ است. در این مقاله قصد داریم این ویژگی را با استفاده از مثال هایی توضیح دهیم.

تبدیل JSON و XML  به کلاس های #C با استفاده از ویژوال استودیو

JSON و XML  دو فرمت داده ایی هستند که اغلب برای برای serialize کردن داده ها استفاده میشوند. در بسیاری از اوقات شما نیاز به map کردن  داده های JSON و XML به کلاس های سی شارپ دارید.

فرض کنید که شما یک توسعه دهنده برنامه هستید که از Web API یا از سرویس WCF استفاده میکنید که این سرویس یک داده به عنوان  JSON و XML برمیگرداند. هنگامی که این داده وارد برنامه شما می شود شما نیاز به خواندن و ذخیره آن در یک شی سی شارپ دارید.

پس شما به کلاس هایی با ساختاری که بتواند داده های  JSON و XML را دریافت کند نیاز دارید.  

بدون شک شما میتوانید این کلاس ها را به صورت دستی وارد کنید ، اما ویژوال استودیو به صورت اتومات این کلاس ها را پردازش میکند.

اگر شما هر کد سی شارپی را باز کنید- یک فایل با پسوند Cs.- تصویر زیر را میبینید.

همانطور که میبینید ،  منو در قسمت edit شامل  Paste Special است که دارای دو زیر منو  است که کلاس های مربوطه را برای شما میسازد.

با مثال به شما نشان میدهیم که این ویژگی ها به چه صورت شکل میگیرد.

یک پروژه جدید Console Application  ایجاد کنید  سپس با استفاده از پنجره ی add new item فایل های XML و JSON را اضافه میکنیم.

این فایل ها صرفا برای مثالی از XML و JSON  تولید شده اند.

حال فایل json خود را باز کنید و در آن کد های زیر را وارد کنید.

{
  "employeeid": 1,
  "firstname": "Nancy",
  "lastname": "Davolio",
  "homephone": "(206) 555-9857"
}

سپس به فایل Program.cs  سوئیچ میکنیم.

مکان نما خود را به کلاس program ببرید و سپس کد خود را paste کنید این باعث میشود که یک کلاس سی شارپ تولید کند.

public class Rootobject
{
    public int employeeid { get; set; }
    public string firstname { get; set; }
    public string lastname { get; set; }
    public string homephone { get; set; }
}

همانطور که میبینید ، کلاس Rootobject  برای property عمومی (public) ساخته شده است.

نام این property ها با نام property های json یکسان است. اما شما میتوانید آن ها را به هر نامی که نیاز دارید تغییر دهید.

حال فایل xml خود را باز کنید  و به شکل زیر داده ها را در آن وارد کنید.

<employee>
  <employeeid>1</employeeid>
  <firstname>Nancy</firstname>
  <lastname>Davolio</lastname>
  <homephone>(206) 555-9857</homephone>
</employee>

حال در اینجا این کد کلاس ما را تولید میکند :

/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute
(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute
(Namespace = "", IsNullable = false)]
public partial class employee
{

    private byte employeeidField;

    private string firstnameField;

    private string lastnameField;

    private string homephoneField;

    /// <remarks/>
    public byte employeeid
    {
        get
        {
            return this.employeeidField;
        }
        set
        {
            this.employeeidField = value;
        }
    }

    /// <remarks/>
    public string firstname
    {
        get
        {
            return this.firstnameField;
        }
        set
        {
            this.firstnameField = value;
        }
    }

    /// <remarks/>
    public string lastname
    {
        get
        {
            return this.lastnameField;
        }
        set
        {
            this.lastnameField = value;
        }
    }

    /// <remarks/>
    public string homephone
    {
        get
        {
            return this.homephoneField;
        }
        set
        {
            this.homephoneField = value;
        }
    }
}

همانطور که ملاحظه میکنید کلاس تولید شده از xml  کمی طولانی و  دارای ویژگی های مربوطه  XML serialization است.

دوباره فایل JSON را باز کرده و کد های زیر را در آن قرار دهید :

{
  "employees": [
    {
      "employeeid": 1,
      "firstname": "Nancy",
      "lastname": "Davolio",
      "homephone": "(206) 555-9857"
    },
    {
      "employeeid": 1,
      "firstname": "Andrew",
      "lastname": "Fuller",
      "homephone": "(206) 555-9482"
    },
    {
      "employeeid": 1,
      "firstname": "Janet",
      "lastname": "Leverling",
      "homephone": "(206) 555-3412"
    }
  ]
}

حالا ما یک آرایه در قالب JSON داریم. اگر شما این ارایه را COPY-PASTE کنید شما این کد را خواهید دید :

public class Rootobject
{
    public Employee[] employees { get; set; }
}

public class Employee
{
    public int employeeid { get; set; }
    public string firstname { get; set; }
    public string lastname { get; set; }
    public string homephone { get; set; }
}

حال کلاس Rootobject  شامل یک آرایه از شی Employee است . کلاس Employee  دارای 4 property عمومی است.

بیایید این را برای xml تکرار کنیم :

<employees>
  <employee>
    <employeeid>1</employeeid>
    <firstname>Nancy</firstname>
    <lastname>Davolio</lastname>
    <homephone>(206) 555-9857</homephone>
  </employee>
  <employee>
    <employeeid>2</employeeid>
    <firstname>Andrew</firstname>
    <lastname>Fuller</lastname>
    <homephone>(206) 555-9482</homephone>
  </employee>
  <employee>
    <employeeid>3</employeeid>
    <firstname>Janet</firstname>
    <lastname>Leverling</lastname>
    <homephone>(206) 555-3412</homephone>
  </employee>
</employees>

حال سی شارپ در کلاس خود این کد را تولید میکند :

/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.
DesignerCategoryAttribute("code")]
[System.Xml.Serialization.
XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute
(Namespace = "", IsNullable = false)]
public partial class employees
{

    private employeesEmployee[] employeeField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute("employee")]
    public employeesEmployee[] employee
    {
        get
        {
            return this.employeeField;
        }
        set
        {
            this.employeeField = value;
        }
    }
}

/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.
XmlTypeAttribute(AnonymousType = true)]
public partial class employeesEmployee
{

    private byte employeeidField;

    private string firstnameField;

    private string lastnameField;

    private string homephoneField;

    /// <remarks/>
    public byte employeeid
    {
        get
        {
            return this.employeeidField;
        }
        set
        {
            this.employeeidField = value;
        }
    }

    /// <remarks/>
    public string firstname
    {
        get
        {
            return this.firstnameField;
        }
        set
        {
            this.firstnameField = value;
        }
    }

    /// <remarks/>
    public string lastname
    {
        get
        {
            return this.lastnameField;
        }
        set
        {
            this.lastnameField = value;
        }
    }

    /// <remarks/>
    public string homephone
    {
        get
        {
            return this.homephoneField;
        }
        set
        {
            this.homephoneField = value;
        }
    }
}

و در آخرین مثال ، کد های json را در فایل آن وارد کنید :

{
  "employeeid": 1,
  "firstname": "Nancy",
  "lastname": "Davolio",
  "phones": {
    "home": "(206) 555-9857",
    "work": "(206) 555-9482"
  }
}

که این شامل شماره تلفن های تو در تو با دو کلید است.home و work

حال کد بالا کلاس زیر را تولید میکند :

public class Rootobject
{
    public int employeeid { get; set; }
    public string firstname { get; set; }
    public string lastname { get; set; }
    public Phones phones { get; set; }
}

public class Phones
{
    public string home { get; set; }
    public string work { get; set; }
}

دو کلاس ساخته شده است . rootobject و phone .

کلاس phone شامل property های home و work است.

حال  کد xml زیر را وارد کنید :

<employee>
  <employeeid>1</employeeid>
  <firstname>Nancy</firstname>
  <lastname>Davolio</lastname>
  <phones>
    <home>(206) 555-9857</home>
    <work>(206) 555-9482</work>
  </phones>
</employee> 

کد زیر را کپی کرده تا خروجی سی شارپ آن را ببینید :

/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.
DesignerCategoryAttribute("code")]
[System.Xml.Serialization.
XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute
(Namespace = "", IsNullable = false)]
public partial class employee
{

    private byte employeeidField;

    private string firstnameField;

    private string lastnameField;

    private employeePhones phonesField;

    /// <remarks/>
    public byte employeeid
    {
        get
        {
            return this.employeeidField;
        }
        set
        {
            this.employeeidField = value;
        }
    }

    /// <remarks/>
    public string firstname
    {
        get
        {
            return this.firstnameField;
        }
        set
        {
            this.firstnameField = value;
        }
    }

    /// <remarks/>
    public string lastname
    {
        get
        {
            return this.lastnameField;
        }
        set
        {
            this.lastnameField = value;
        }
    }

    /// <remarks/>
    public employeePhones phones
    {
        get
        {
            return this.phonesField;
        }
        set
        {
            this.phonesField = value;
        }
    }
}

/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.
DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute
(AnonymousType = true)]
public partial class employeePhones
{

    private string homeField;

    private string workField;

    /// <remarks/>
    public string home
    {
        get
        {
            return this.homeField;
        }
        set
        {
            this.homeField = value;
        }
    }

    /// <remarks/>
    public string work
    {
        get
        {
            return this.workField;
        }
        set
        {
            this.workField = value;
        }
    }
}

حال این دارای دو کلاس است. employee و employeePhones .

کد تولید شده توسط سی شارپ ممکن است که دقیقا انتظارات ما را براورده نکند اما شما میتوانید با تنظیم نامی خوب برای کلاس ها این تولید کد را به آنچه که میخواهید نزدیکتر کنید.

آموزش سی شارپ

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • C#.net
  • 2k بازدید
  • 5 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید