Silverlight と Java で連携出来た〜

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; }
}

Java

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