LoginSignup
35
23

More than 5 years have passed since last update.

VisualStudio コピペ JSONをClassとして貼り付けられるtips

Last updated at Posted at 2016-11-28

概要

こんなTweetを見かけたので、さっそくやってみた。
VisualStudioにはJSONをクラスとして貼り付けるという機能があるよ、と。

用意したJSON

    {
        "title":"Harry Potter and the Philosopher's Stone",
        "author":"J.K. Rowling",
        "hoge": {
            "stringField": "piyo",
            "numField": 123,
            "floatField":  20.315,
            "boolField": false
        },
        "tags": ["novel", "story", "magic"],
        "valiableTags": [123, false, "str"],
        "intArray": [1, 2, 3, 4, 5],
        "floatArray": [1.2, 1.3, 1.4, 2.0],
        "date": "2016/11/29T12:34:56.000",
        "year":"1997"
    }
変数 意図
hoge ネストした場合はどうなるか
numField 数値型がどうなるか
floatField 小数点を含む数値の場合どうなるか
boolField 真偽値の場合どうなるか
tags stringの配列だとどうなるか 
valiableTags stringだけでなく、いろんなオブジェクト型が混在する場合どうなるか
intArray intの配列だとどうなるか
floatArray floatの配列だとどうなるか
date 日付を表す文字列だとどうなるか ※日付の書式については、詳細は下の方に追記あり
year 数値だけども、文字列として書かれた場合どうなるか

いざ、実践

試した環境は、VisualStudio2015 CommunityEditionです。

[編集]-[形式を選択して貼り付け(s)] から[Paste JSON As Classes]を選択します。

vsc.png

貼り付けると、こんなコードが生成されました。



public class Rootobject
{
    public string title { get; set; }
    public string author { get; set; }
    public Hoge hoge { get; set; }
    public string[] tags { get; set; }
    public object[] valiableTags { get; set; }
    public int[] intArray { get; set; }
    public float[] floatArray { get; set; }
    public string date { get; set; }
    public string year { get; set; }
}

public class Hoge
{
    public string stringField { get; set; }
    public int numField { get; set; }
    public float floatField { get; set; }
    public bool boolField { get; set; }
}


vsc3.png

[追加] DateTimeの確認

コメントでDateTimeもいけました、と。こんなクソみたいな記事にコメントいただけてありがたい限りです。

WikipediaのISO_8601の項目を参考に、以下の文字列を試してみた。

{"date": "2016-11-29T12:00:00.000",
 "date1": "2016-11-29T12:00:00.000Z",
 "date2": "2016-11-29T12:00:00.000+09:00",
 "date3": "2016-092",
 "date4": "2016-11",
 "date5": "20161129",
 "date6": "2016-11-29",
 "date7": "2016-W14-4"
}

結果はこちら。
vsc4.png

おそらくISO8601に従っていて、日付、時間までそろっていればよさげ。

まとめ

  • ルートはRootobjectという名前になり、ネストされているオブジェクトもクラスになる
  • string, int, float, boolといった基本的な型についてはOK
  • 日付の文字列については、ISO8601の形式にあわせればDateTimeになる
  • 複数要素がある場合、配列として宣言される
  • 配列の中身が同じ型で、かつ基本的な型であれば、その型の配列になる
  • 異なるオブジェクトが混在する配列だと、object型の配列になる

すでにあるJSONから、モデルの生成などに使えるかも。
たとえば、誰かが作ったelasticsearchのtypeの検索結果から、NESTで使用する際に使うオブジェクトの生成とか。

35
23
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
35
23