- ensure_ascii=Falseを指定することで日本語対応
- 正直、何をやっているのか不明(とりあえず動いた)
というところです。
(参考)
情報工学技術を利用した教育支援、いわゆる教育工学の研究やってます。研究に関係する技術動向(プログラミングねた)や、日常の覚書き、呟きなどを書いていこうかと思います。今のところ、初歩的なプログラムネタばっかりですが、、、、長い目でお付き合いください。
[DataContract]
public class UrlInfo
{
[DataMember(Name = "kind")]
public string Kind { get; set; }
[DataMember(Name = "id")]
public string ShortUrl { get; set; }
[DataMember(Name = "longUrl")]
public string LongUrl { get; set; }
}
C#コードusing System.Runtime.Serialization; using System.Runtime.Serialization.Json; var serializer = new DataContractJsonSerializer(typeof(UrlInfo)); var jsonBytes = Encoding.Unicode.GetBytes(surl); var ms = new MemoryStream(jsonBytes); var gURL = (UrlInfo)serializer.ReadObject(ms);以上で、gURLにはjsonのデータが対応する各プロパティに入っていますので、gURL.ShortUrl等で呼び出すことができます。
{以下のプログラムは、クライアント側のプログラムです。Userクラスに自動的にマッピングしてくれます。
"name":"ochi",
"age":10,
"adress":
{"name":"Osaka"}
}
JsonpRequestBuilder jb = new JsonpRequestBuilder();
jb.requestObject(
"http://XXXXX.XXX.XXXX.json",
new AsyncCallback<JsArray>() {
public void onFailure(Throwable caught) {
GWT.log("failure", caught);
}
public void onSuccess(JsArray<User> result) {
StringBuilder sb = new StringBuilder();
Window.alert("Success");
for (int i = 0; i < result.length(); i++) {
sb.append(result.get(i).getName());
}
resultArea.setValue(sb.toString());
}
});
ここで、注意しなければならないのは、クラスの宣言方法です。下記のように、JSNI形式でなければなりません。 import com.google.gwt.core.client.* ;
import java.util.* ;
final public class User extends JavaScriptObject {
protected User(){
}
public native java.lang.Long getId()/*-{
return this['id'];
}-*/;
public native Address getAddress()/*-{
return this['address'];
}-*/;
public native java.lang.String getName()/*-{
return this['name'];
}-*/;
final static public class Address extends JavaScriptObject {
protected Address(){
}
public native java.lang.String getName()/*-{
return this['name'];
}-*/;
}
}
このようなクラスを記述するのが手間ですが、実は作成を支援してくれるサイトがあります。<inherits name='com.google.gwt.jsonp.Jsonp' />の記述が必要です。
< inherits name='com.google.gwt.json.JSON' />の記述が必要です。