Visual Studio의 기본 기능으로 JSON에서 클래스를 자동으로 생성하는 방법

11095 단어 VisualStudioC#

소개



별로 이 근처의 기본 기능이 유명하지 않은 것 같기 때문에 소개할까 생각합니다.
덧붙여서입니다만 XML 에서도 완전히 같은 것이 가능합니다.

전제


  • 적절한 C# 프로젝트를 만드십시오

  • JSON



    이번에는 다음과 같은 JSON을 이용하겠습니다.

    참조 : Qiita API v2 | /api/v2/templates/:template_id
    {
      "body": "Weekly MTG on %{Year}/%{month}/%{day}",
      "id": 1,
      "name": "Weekly MTG",
      "expanded_body": "Weekly MTG on 2000/01/01",
      "expanded_tags": [
        {
          "name": "MTG/2000/01/01",
          "versions": [
            "0.0.1"
          ]
        }
      ],
      "expanded_title": "Weekly MTG on 2015/06/03",
      "tags": [
        {
          "name": "MTG/%{Year}/%{month}/%{day}",
          "versions": [
            "0.0.1"
          ]
        }
      ],
      "title": "Weekly MTG on %{Year}/%{month}/%{day}"
    }
    

    이 JSON을 클립 보드에 복사하십시오.

    Visual Studio



    클래스 파일 하나 추가



    이번에는 Template.cs를 추가했습니다.


    JSON을 클래스로 붙여넣기



    [편집] → [형식을 선택하여 붙여넣기] → [JSON을 클래스로 붙여넣기]


    Rootobject 클래스 수정


    Rootobject 라고 하는 클래스와 함께 관련 클래스가 자동으로 생성되므로, 나머지는 기호로 수정해 갑니다.
    여기서 주의해야 할 것은 "속성 이름을 변경해서는 안된다"라는 것입니다. 클래스 이름은 변경해도 괜찮습니다.

    이번에는 다음과 같이 했습니다.


    여기서 문제가되는 것은 속성 이름이 일반 C# 코딩 가이드 라인을 따르지 않는다는 것입니다.
    그래서 이번에는 System.Runtime.Serialization.DataMemberAttribute를 이용해 가겠습니다.

    각 프로퍼티에 이 속성을 이용해 주어 다음과 같이 합니다.


    이제 Upper Camel Case에서 속성을 작성하면서 성공적으로 deserialize할 수 있습니다.
    여기서 주의입니다만, 이용하는 디시리얼라이저에 따라서는 다른 Attribute 가 준비되어 있을 가능성이 있으므로, 그 근처는 문서에 따라 양호하게 대응해 주세요.

    디시리얼라이즈 해보자



    nuget에서 Utf8Json을 도입하여 deserialize 해보십시오.

    Program.cs
    using System;
    
    namespace ConsoleApp
    {
        class Program
        {
            static void Main(string[] args)
            {
                var json = @""
    {
      ""body"": ""Weekly MTG on %{Year}/%{month}/%{day}"",
      ""id"": 1,
      ""name"": ""Weekly MTG"",
      ""expanded_body"": ""Weekly MTG on 2000/01/01"",
      ""expanded_tags"": [
        {
          ""name"": ""MTG/2000/01/01"",
          ""versions"": [
            ""0.0.1""
          ]
        }
      ],
      ""expanded_title"": ""Weekly MTG on 2015/06/03"",
      ""tags"": [
        {
          ""name"": ""MTG/%{Year}/%{month}/%{day}"",
          ""versions"": [
            ""0.0.1""
          ]
        }
      ],
      ""title"": ""Weekly MTG on %{Year}/%{month}/%{day}""
    }
                "";
    
                var x = Utf8Json.JsonSerializer.Deserialize<Template>(json);
                Console.WriteLine($"body= {x.Body}\r\nid= {x.ID}\r\nname= {x.Name}");
            }
        }
    }
    

    실행 결과는 다음과 같습니다.


    결론



    생성되는 클래스가 처음부터 Upper Camel이라면 더 사용하기 쉽습니다.
    거기는 향후 기대라고 하는 곳이군요.

    좋은 웹페이지 즐겨찾기