加藤潤(98)37この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。はじめにこんにちは!モバイルアプリサービス部の加藤です。今回はC#でJSONを扱う方法について書いてみたいと思います。C#でJSONを扱う方法はいろいろありますが、DataContractJsonSerializerJson.NETDynamicJsonあたりがよく知られたメジャーな方法だと思いますので、これらについてまとめてみたいと思います。Frameworkで提供されている、オブジェクトをJSONにシリアライズ、JSONをオブジェクトにデシリアライズするためのクラスです。名前空間はSystem.Runtime.Serialization.Json、アセンブリはSystem.Runtime.Serialization.dllです。参照を追加するDataContractJsonSerializerを使うにはアセンブリの参照を追加する必要があります。プロジェクトの「参照」を右クリックして「参照の編集」をクリックします。「System.Runtime.Serialization」で検索し、アセンブリSystem.Runtime.SerializationにチェックをつけてOKをクリックします。アセンブリSystem.Xmlも必要になるので同様に追加しておきます。オブジェクトをJSONにシリアライズ以下のようなモデルクラスをJSONにシリアライズする場合を考えます。System.Console;シリアライズは以下のように行います。Jun"}}DataMember属性でJSONのキーを指定する上述の例ではモデルクラスのプロパティ名がそのままJSONのキーになっており、先頭が大文字になっています。先頭を小文字にしたい場合やプロパティ名とは別のキーを指定したい場合はDataMember属性を使用します。以下のようにクラスにDataContract属性、プロパティにDataMember属性を付与し、NameにJSONのキーを指定します。}}シリアライズ結果は以下のようになります。Jun"}IgnoreDataMember属性でシリアライズ対象外を設定する上述した例ではモデルクラスに定義したプロパティ全てをJSONにシリアライズしましたが、ケースによってはJSONに含めたくないプロパティも出てきます。そのような時は対象のプロパティにIgnoreDataMember属性を付与することでシリアライズの対象外にすることができます。試しにAgeプロパティを対象外にしてみます。}シリアライズ結果は以下のようになります。Ageが含まれていないことが確認できます。Jun"}ちなみに、以下のように属性を何も付与しない場合も同様にシリアライズ対象外となります。これでも対象外となる}JSONをオブジェクトにデシリアライズ今度はJSONをオブジェクトにデシリアライズしてみます。デシリアライズは以下のように行います。31簡単ですね!Json.NETJson.NETとはJson.NETはMITライセンスで公開されている.NET用のオープンソースJSONライブラリで、以下の特徴を謳っています。SupportXMLとJSONの相互変換をサポート導入nugetでサクッとインストールできます。プロジェクトの「パッケージ」を右クリックして「パッケージの追加」をクリックします。Package」をクリックします。本記事執筆時点の最新バージョンは9.0.1です。「パッケージ」に「Newtonsoft.Json」が追加されればインストール完了です。オブジェクトをJSONにシリアライズ以下のように1行でシリアライズできます。Jun","Age":31}JsonProperty属性でJSONのキーを指定するプロパティ名とは別のキーを指定したい場合はJsonProperty属性を使用します。}}JsonIgnore属性でシリアライズ対象外を設定する対象のプロパティにJsonIgnore属性を付与することでシリアライズの対象外にすることができます。このプロパティはシリアライズ対象外となる他にも属性や機能がいっぱいJson.NETには他にも指定できる属性や機能が豊富にあります。JSONにシリアライズした時のプロパティの並び順を制御したりもできちゃいます。JSONをオブジェクトにデシリアライズデシリアライズも簡単にできます。ジェネリックに対応しているのでデシリアライズ時に型を指定できます。JSON以下のようにParseメソッドでJSON文字列をJson.NETのオブジェクトに変換できます。}");Json.NETのオブジェクトはLINQが使えます。以下の例ではageが一番大きい(最年長)人をLINQで取得しています。Pathを使ってクエリできます。以下はageが50以下の人のnameを取得する例です。SupportJSONをXMLに変換JsonConvert.DeserializeXmlNodeを使えば、JSONをXMLに変換できます。</person>//</people>Attributeは@プレフィックスをつける必要があります。XMLをJSONに変換JsonConvert.SerializeXmlNodeを使用します。4.0で導入されたdynamicを活用することでJSONを「緩く、手軽に」扱えるようにするライブラリです。ライセンスはMs-PLです。導入nugetでインストール可能です。本記事執筆時点の最新バージョンは1.2.0です。インストールが完了するとDynamicJson.csが追加されます。ライブラリといっても400行くらいのファイル1つだけなのでとても軽量です。アセンブリSystem.Xml.LinqとMicrosoft.CSharpも必要なので参照を追加しておきましょう。オブジェクトをJSONにシリアライズDynamicJson.Serializeでシリアライズできます。Jun","Age":31}JSONをオブジェクトにデシリアライズデシリアライズはDynamicJson.Parseで行います。31匿名型でJSONを作る匿名型を使ってJSONをサクッと作れます。{"Name":"PIKOTARO","Age":53}ドット(.)でプロパティにアクセスDynamicJson.Parseの戻り値(DynamicJson)はdynamic型になっており、プロパティにはドット(.)でアクセス可能です。53存在しないプロパティにアクセスすると例外になりますが、IsDefinedで存在チェックができます。falseDynamicJsonを編集するDynamicJsonは可変で以下のようにJavaScriptっぽい書き方で編集することができます。DynamicJsonから文字列へのシリアライズはToString()を呼ぶだけです。{"Name":"PPAP","Id":1}結局どれを使えばいいの?これは「作るアプリによる」と言ってしまえばそれまでなのですが、筆者は以下のように考えています。Json.NETほどの機能は不要で、型を事前定義せずに緩く扱いたい時まとめ今回は、C#でJSONを扱う方法のメジャーどころをまとめてみました。今回取り上げた以外にもJSONを扱う方法はあると思いますが、まずは本記事の内容をおさえておくと良いと思われます。リモート】クラスメソッドの会社説明会を開催しますクラスメソッドでは、AWS・AI・ビッグデータ・モバイルなどの技術職や営業のメンバーとして一緒にお仕事をする仲間を大募集しています。#cmdevio新型コロナウイルスの感染拡大を受け、本イベントを延期させていただくことになりました(開催時期未定)。お申し込みいただいた皆様には大変申し訳ございませんが、何卒ご理解いただけますようよろしくお願いいたします。AWSについてライトに色んな情報交換をしましょう。カフェ店長のオカノです。今日はオフィスに用があるので、通勤ラッシュを避けて出社しました。この子は新メンバーのさめくんです。在宅勤務が推奨されているのでオフィスが閑散としており、すこしさみしそうです。本が出ていたので読んでみたところよかったので紹介させていただきます。使いたいときの注意点を書きました。新井成一64最近Sphinxつかってドキュメントを書いてるのですがなかなかイケています。臼田佳祐295ワークフロー自動化OSSのn8nをAWS環境で建てて検証してみました。非常に期待できるサービスです。Fargateの勉強をしています。使ってみたい方は参考にしてください。洋介255SnowflakeがAWSの東京リージョン上で稼働するようになりました。データを日本に置けます。芳賀健232こんにちは!猫様の忠実なるしもべ、芳賀健です。Tokyoで開催されました。カフェ店長のオカノです。クラスメソッド株式会社が運営するAWS・iOS・HTML5に関する技術情報サイトです。