The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

如何讓 LINQPad 輸出的 JSON 結果可以顯示語法高亮

我經常透過 LINQPad 撰寫一些範例程式或實驗一些 C# 的新特性,其中最常使用的一個 API 就是 LINQPad 內建的 .Dump() 擴充方法了,他可以將一些執行結果輸出在結果視窗中,非常方便。如果要說缺點,應該就是沒有語法高亮(Syntax Highlight)了吧!這篇文章我來分享一個小技巧,幫助你在輸出結果呈現語法高亮!👍

LINQPad

先看看執行結果

  • 先看看預設的 .Dump() 輸出結果

    結果會輸出在 Results 預設頁籤中,:

    .Dump()

  • 再看看我自己擴充的 .DumpJson() 輸出結果

    結果會輸出在 JsonResult 自訂頁籤中,跟 Results 是分開的:

    .DumpJson()

如何自訂 LINQPad 擴充方法

  1. 先開啟 My Documents\LINQPad Plugins\NetCore3\MyExtensions.linq 檔案

    這是預設給 LINQPad 使用者用來擴充查詢視窗程式的地方,該檔案有個 public static class MyExtensions 靜態類別,專門讓你在這裡寫上各種擴充方法!

    預設內容如下:

    void Main()
    {
      // Write code to test your extensions here. Press F5 to compile and run.
    }
    
    public static class MyExtensions
    {
        // Write custom extension methods here. They will be available to all queries.
    }
    
    
    // You can also define namespaces, non-static classes, enums, etc.
    
    #region Advanced - How to multi-target
    
    // The NETx symbol is active when a query runs under .NET x or later.
    
    #if NET7
    // Code that requires .NET 7 or later
    #endif
    
    #if NET6
    // Code that requires .NET 6 or later
    #endif
    
    #if NET5
    // Code that requires .NET 5 or later
    #endif
    
    #endregion
    
  2. 你可以在 MyExtensions 靜態類別中加入以下程式碼

    這裡包含了 Json 與 C# 輸出的語法高亮功能:

    public static string JsonPrettify(this string json)
    {
        using var jDoc = JsonDocument.Parse(json);
        return JsonSerializer.Serialize(jDoc, new JsonSerializerOptions { WriteIndented = true });
    }
    
    public static string ToJsonDump(this object data) {
      return JsonPrettify(JsonSerializer.Serialize(data)).Dump();
      }
    
    public static string DumpJson(this string code, string panelTitle = null)
    {
        return DumpWithSyntaxHightlighting(JsonPrettify(code), SyntaxLanguageStyle.Json, panelTitle);
    
    }
    
    public static string DumpCSharp(this string code, string panelTitle = null)
    {
        return DumpWithSyntaxHightlighting(code, SyntaxLanguageStyle.CSharp, panelTitle);
    }
    
    public static string DumpWithSyntaxHightlighting(this string code,
        SyntaxLanguageStyle language = SyntaxLanguageStyle.XML,
        string panelTitle = null)
    {
        if (panelTitle == null)
            panelTitle = Enum.GetName(typeof(SyntaxLanguageStyle), language) + "Result";
    
        PanelManager.DisplaySyntaxColoredText(code, language, panelTitle);
        return code;
    }
    

    事實上,你可以從原始碼中看到 SyntaxLanguageStyle 就是用來指定語法高亮的語言樣式,支援的程式語言類型如下:

    public enum SyntaxLanguageStyle
    {
      None,
      CSharp,
      VB,
      FSharp,
      SQL,
      ESQL,
      CSS,
      HTML,
      JavaScript,
      PowerShell,
      Python,
      XAML,
      XML,
      Json
    }
    

    程式碼應該非常簡單易懂,大家都可以自己稍微修改即可使用!👍

相關連結

留言評論