スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

[C#] Jsonライブラリの検討と設定ファイルの移行について

前回は、yamlのライブラリ検証で終っていしまいました。

今回は、jsonのライブラリ検証をしてみたいと思います。
調べた結果、以下の2つが有力のようです。
DynamicJson
JSON.NET


最後まで読むのが面倒だと思われるので、設定、状態保存をどのフォーマットにするかの検討結果を、
先に書きたいと思います。

[検討結果]
・yaml
 前回の結果から、yamlを使用するのであれば、現在(2011.11)であれば、
 YamlSerializer for .NETが有望だと思います。
 ただし、あまり機能は多くありません。
 ですので、現状ではyamlの対応は厳しいと個人的に思いました。

・json
 個人的には、Json.NETが有望だと思います。
 DinamicJsonは、.NET4.0のみの対応と考えると使用範囲が限定されます。
 Json.NETは、.NET2.0から対応していますし、作りこみが良く、
 機能も充実おり、ドキュメントも揃っています。
 両ライブラリとも非常に素晴らしいライブラリですので、どちらを使うにしても
 .NET環境でのJsonは卒なく使える印象を受けました。

・.NET環境での設定ファイルの移行について
 ここでは、.NET環境で設定、状態保存ファイルのフォーマットについて書きます。
 iniは、やはり配列等の状態を保存できないことから、時代遅れを感じます。
 xmlは、やはり見づらいというのが一番の回避理由でしょうか。
 また、ハンドリングも結構面倒くさいです。
 レジストリは、面倒くさいですし、ユーザによっては
 レジストリを弄って欲しくないということもあるので敬遠します。
 yamlに関しては、ライブラリが非充実ということがあります。
 Jsonは、ライブラリも充実しており、ハンドリングも楽です。
 
という理由から、これから設定、状態保存ファイルのフォーマットを検討するのであれば、Jsonをお薦めします。
ライセンスの問題もありますが、Json.NETはMITですし、DynamicJsonはMicrosoft Public Licenseです。
ですので、商用に使用しても問題無いです。
また、両ライブラリともソースコードを公開していますので、
変に上(小煩い上司や客先)が騒がなければ使用して全く問題ないと思います。
 

ということで、今回のJsonの2つについて検証した詳細を書きます。


[JSON]
・DynamicJson
このライブラリは、.NET Framework4.0が必須のようです。
なので、現状4.0を開発環境に入れることができない私の環境で検証することができませんでした。
(後日追記するかも??)
ただし、非常に軽く、使い勝手がよさそうです。
ドキュメントを見る限り、オリジナルクラスや配列等をjsonに落とすことが可能だと思います。
ただ、やはり4.0が必須っていうのは厳しいですね。

・JSON.NET
非常に使えます。
ライブラリも直感的に使用でき、快適ですし、機能も充実しています。
オリジナルクラス(リスト、配列込)を検証してみたいと思います。
オリジナルクラスのコード(Person.cs,Cat.cs,Car.cs)については、前回を参照ください。
以下のメインを実行するとこのようなJSONが出力されます。


{
    "Name":"智子",
    "Age":22,
    "IDs":[1,12],
    "Cats":[
        {
            "Age":1,
            "Name":"トラ"
        },
        {
            "Age":2,
            "Name":"たま"
        }
    ]
}




Program.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using Newtonsoft.Json;


namespace JSONTest {
class Program {
// メイン
static void Main(string[] args) {
/*** オリジナルオブジェクト ***/
Person satoko = new Person("智子", 22);
satoko.Cats.Add(new Cat("トラ",1));
satoko.Cats.Add(new Cat("たま",2));
satoko.IDs = new List{1 , 12};


// Personシリアライズ - Console
string json = JsonConvert.SerializeObject(satoko, Formatting.Indented);
Console.WriteLine(json);
/* Console出力
{
"Name":"智子",
"Age":22,
"IDs":[1,12],
"Cats":[
{
"Age":1,
"Name":"トラ"
},
{
"Age":2,
"Name":"たま"
}
]
}
*/

// Personデシリアライズ - Console
Person desatoko = JsonConvert.DeserializeObject(json);


/*** コンストラクタに引数が必要な場合 ***/
Car vitz = new Car("123-456");
vitz.Name = "Vitz";

// Carシリアライズ - Console
json = JsonConvert.SerializeObject(vitz);
Console.WriteLine(json);
/* Console出力
{
"Number":"123-456",
"Name":"Vitz"
}
*/

// Carデシリアライズ - Console
Car devitz = JsonConvert.DeserializeObject(json);
}
}
}


Json.NETの他機能の備考として、
JsonReaderや、JsonWriterがありますが、
これらのオブジェクトは、行単位で処理するものです。
ですので、シリアライズで一発変換はできません。


という感じで、終わり。



スポンサーサイト

テーマ : プログラミング
ジャンル : コンピュータ

コメントの投稿

非公開コメント

プロフィール

名前 :ss_9
紹介 :
20代はエンジニア、30代はプロ、40代は管理、50代は人脈。

Twitterボタン

最新記事
カテゴリ
AD
月別アーカイブ
RSSリンクの表示
RSSリンクの表示
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。