JSON を使って連携出来た〜。
Java 側は、json-lib(バージョンは不明)
Silverlight 側は、DataContractJsonSerializer クラス を使って出来た。
ただ、何点か注意点があった。
- 連携するために、.NET、Java 両方で似たようなクラスを実装する必要がある。
まあこれはしょうがないかなと。どっちかだけ実装して、もう片方はコンバーターでも作って自動生成したらいいや。
- getter だけだとうまく変換出来なかった。
多分.NET の方だったと思うけど、プロパティを getter しか公開しなかったら例外が出た。
※ちゃんと調べてないから回避方法があるかもしれない。
- 日付型がうまく連携出来なさそう。
出力した JSON 文字列の結果しか見てないけど、.NET 側では、確か
"Key" : "Date\960000000000"
こんな感じだった。多分 Ticks プロパティの値だと思う。
でも、Java 側では、
"key" : { "year" : 2000, "month" : 1 〜 }
こんな感じで JSON 文字列に変換されてた。
多分、連携出来ないんじゃないかな〜?文字列型として渡すとかの工夫がいるのかな。
- Java 側で JSON 文字列から生成する型に List があるとうまくいかない。
そのままでは、うまく変換出来なかった。JsonConfig を使う事!
【参考にしたサイト】
http://www.masatom.in/pukiwiki/JSON/Json-lib%A4%F2%BB%C8%A4%A6/JSON%A4%AB%A4%E9Java%A4%D8%A4%A4%A4%ED%A4%F3%A4%CA%CA%D1%B4%B9/
- .NET と Java では、命名規約が違う。
.NET では、プロパティは Upper Camel で命名するので、JSON 文字列の Key に当たる部分が Upper Camel になる。
Java では、フィールドは Lower Camel で命名するので、JSON 文字列の Key に当たる部分が Lower Camel になる。
多分、どっかで差異を吸収出来るんだと思うけど、面倒なので .NET 側のプロパティを Lower Camel で命名した。
- .NET 標準の DataContractJsonSerializer が使いにくい
いちいち Stream を経由しないと JSON から変換/に変換が出来ない。オープンソースのライブラリを使う or 自前でラップしたクラスを作ればいいのかもしれない。
Json.NET とか。※試してないけど。
- Java 側の JSON と連携するクラスの実装が面倒くさい。
.NET と比べて実装が冗長。。まあ自動生成する予定だけど。でも、コードの可読性が良くないよ。
.NET
public class Person { public string name { get; set; } public int age { get; set; } }public class Person { private int age; private String name; public void setAge(int age) { this.age = age; } public int getAge() { return this.age; } public void setName(String name) { this.name = name; } public String getName() { return this.name; } }
ここで、Groovy の出番ですね!こっそり、紛れ込ませられるかなw