Quantcast
Channel: C#タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 9309

Visual Studioの基本機能で JSON からクラスを自動生成する方法

$
0
0

はじめに

あんまりこの辺の基本機能が有名ではないようなので紹介しておこうかと思います。
ちなみにですが 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

クラスファイルを 1つ 追加する

今回は Template.csを追加しました。
image.png

JSON を クラス として貼り付ける

[ 編集 ][ 形式を選択して貼り付け ][ JSON をクラスとして貼り付ける ]
image.png

Rootobject クラスを修正する

Rootobjectというクラスとともに関連クラスが自動で生成されるので, あとはお好みで修正していきます。
ここで注意しなければならないのは, "プロパティ名を変更してはならない"ということです。クラス名は変更しても問題ありません。

今回は以下のようにしました。
image.png

ここで問題になってくるのが, プロパティ名が通常の C# コーディングガイドラインに則っていないことです。
そこで今回は System.Runtime.Serialization.DataMemberAttributeを利用していこうと思います。

各プロパティにこの属性を利用してあげて、以下のようにします。
image.png

これで Upper Camel Case でプロパティを書きつつ正常にデシリアライズできるようになりました。
ここで注意ですが, 利用するデシリアライザによっては別の Attribute が用意されている可能性があるので, その辺りはドキュメントに従って良しなに対応してください。

デシリアライズしてみる

nugetから Utf8Jsonを導入してデシリアライズしてみます。

Program.cs
usingSystem;namespaceConsoleApp{classProgram{staticvoidMain(string[]args){varjson=@""{""body"":""WeeklyMTGon%{Year}/%{month}/%{day}"",""id"":1,""name"":""WeeklyMTG"",""expanded_body"":""WeeklyMTGon2000/01/01"",""expanded_tags"":[{""name"":""MTG/2000/01/01"",""versions"":[""0.0.1""]}],""expanded_title"":""WeeklyMTGon2015/06/03"",""tags"":[{""name"":""MTG/%{Year}/%{month}/%{day}"",""versions"":[""0.0.1""]}],""title"":""WeeklyMTGon%{Year}/%{month}/%{day}""}"";varx=Utf8Json.JsonSerializer.Deserialize<Template>(json);Console.WriteLine($"body= {x.Body}\r\nid= {x.ID}\r\nname= {x.Name}");}}}

実行結果は以下のようになります。
image.png

おわりに

生成されるクラスが最初から Upper Camel だと, もっと使いやすいのですが…。
そこは今後に期待というところですね。


Viewing all articles
Browse latest Browse all 9309

Trending Articles