JSON<>C#オブジェクト変換クラス
たとえば
class Person{ public string Name; publinc int Age; }
見たいなC#クラスのオブジェクトを
{ "Person":{ "__Type":"Person" ,"Name":"山田太郎" ,"Age":47 } }
JSONオブジェクトに変換する。
__Typeって入れるのは独自仕様だが、これを入れとかないとobjectやArrayListに入れられたオブジェクトを取り出すときにあらかじめタイプが判明してないと取り出せない。抽象クラスだとnew出来ないからどうにもならなくなる。
・JSONオブジェクトに変換するとき
C#オブジェクトのタイプを取得し、メンバーと値のペアをJSONオブジェクトに追加。
再帰してすべてのメンバーを処理する。
・C#オブジェクトに変換するとき
C#オブジェクトのタイプを取得し、メンバー名に該当するJSON要素を取り出す。
取り出すときリスト系はList<>,ArrayList,配列でオブジェクトの生成方法が違うので処理を分けなければならない。
objectからそれぞれのタイプに簡単にコピーできればいいのだが。
・IListインターフェースは作れるがAdd,Copyなどがない。
コードは別途。
もしかしたらこれを応用してSystem.Xml.SerializationよりスマートなXmlSerializerができるかもしれない。
悩んだのは
- JSONインターフェースを作り、実装クラスにインターフェースを実装させたほうがいいのか?
- それならprivateフィールドも取り出せる。
- でもそれだとJSON化したいクラスでいちいち実装しなければならない。面倒くさい。
インターフェースを定義しておいて、独自の変換ルールを定義したい場合はそのインターフェースを使って変換させるのがいいか。そうだそうしよう。