只有累積,沒有奇蹟

2019年2月18日 星期一

[VisualStudio] Paste Special - 將 Json 或 XML 文字轉換為 C# 類別物件

問題 
這陣子開發工作上常遇到要與第三方做串接的服務,第三方服務提供的技術文件中格式不外乎以 Json 或是 XML 兩種為主,往往都要針對這些屬性自己建立新的類別 Model 的動作,如果 XML 或 JSON 屬性欄位多的話要花不少時間在處理建立對應類別上,但不用擔心,號稱地表上最強的開發 IDE Visual Studio 從 2012 開始提供 Json 與 XML 轉 Class 類別的功能,操作與使用上相當簡單,這篇就來介紹此功能的使用方式。 

使用方式 
打開 Visual Studio 點選左上角 Edit > Paste Special,就可以看到可以將剪貼簿內容的文字轉換為 Json 或是 XML 的選項,以下就針對兩個選項做簡單的介紹與 Sample

Json 轉 Class
Json 檔案範例是從 .NET Core 專案的 appsetting.json 抓下來,如下所示
{
  "ConnectionStrings": {
    "DefaultConnection": "Server=(localdb)\\mssqllocaldb;Database=aspnet-ASPCoreLab;Trusted_Connection=True;MultipleActiveResultSets=true"
  },
  "Logging": {
    "LogLevel": {
      "Default": "Warning"
    }
  },
  "AllowedHosts": "*"
}
Step 1 : 打開 Visual Studio 2017,建立一個新的 Class 類別,接著複製要轉換的 Json 檔案
Step 2 : Edit > Paste Special > Paste Json to Class
public class Rootobject
{
    public Connectionstrings ConnectionStrings { get; set; }
    public Logging Logging { get; set; }
    public string AllowedHosts { get; set; }
}

public class Connectionstrings
{
    public string DefaultConnection { get; set; }
}

public class Logging
{
    public Loglevel LogLevel { get; set; }
}

public class Loglevel
{
    public string Default { get; set; }
}
會產生 RootObject 類別物件,其中包含要轉換 Json 類別的屬性 connectionString、logging、Loglevel 其相對應的 Class 類別

XML 轉 Class
自己定義一個簡單的 XML 檔案,如下所示
<card>
   <name>Marcus Tung</name>
   <title>打雜工程師</title>
   <email>iamnewuser@gmail.com</email>
   <phone>886 82 5252</phone>
   <logo url="widget.gif"/>
 </card>
Step 1 : 打開 Visual Studio 2017,建立一個新的 Class 類別,接著複製要轉換的 XML 檔案
Step 2 : Edit > Paste Special > Paste XML to Class
// NOTE: Generated code may require at least .NET Framework 4.5 or .NET Core/Standard 2.0.
/// <remarks/>
[System.SerializableAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
[System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
public partial class card
{

    private string nameField;

    private string titleField;

    private string emailField;

    private string phoneField;

    private cardLogo logoField;

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

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

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

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

    /// <remarks/>
    public cardLogo logo
    {
        get
        {
            return this.logoField;
        }
        set
        {
            this.logoField = value;
        }
    }
}

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

    private string urlField;

    /// <remarks/>
    [System.Xml.Serialization.XmlAttributeAttribute()]
    public string url
    {
        get
        {
            return this.urlField;
        }
        set
        {
            this.urlField = value;
        }
    }
}
會產生 Rool XML Card 類別物件,並且會自動幫你預設定義好 attribute,像是 Serializable、XML Type 等相關定義,Card 底下的五個屬性有分別定義相關的 get / set,算是非常實用 !

心得
使用地表上最強 IDE 開發十分方便,連這小細節在早期就開始提供,但知道此功能的人似乎不多有點可惜就是,日後如果有遇到一些不錯的功能在陸續介紹在 Blog 上給需要的朋友,Happy Coding !!

0 意見:

張貼留言

Copyright © m@rcus 學習筆記 | Powered by Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com