.NET 3.5 Compact Framework / Windows CE アプリでは、json を返す WebAPI メソッドを使用する必要があります。RestSharp は、CF 対応ではないことを除いて、これには最適のように見えます ( Uri は .NET 3.5 の System 以外のアセンブリで利用可能ですか、それ以外の場合は、この RestSharp コードで Uri を解決するにはどうすればよいですか?を参照してください)。
したがって、おそらく HttpWebRequest を使用します。次のコードを使用して、WebAPI メソッドから値を返すことができます。
string uri = "http://localhost:48614/api/departments";
var webRequest = (HttpWebRequest)WebRequest.Create(uri);
var webResponse = (HttpWebResponse)webRequest.GetResponse();
if ((webResponse.StatusCode == HttpStatusCode.OK) && (webResponse.ContentLength > 0))
{
StreamReader reader = new StreamReader(webResponse.GetResponseStream());
MessageBox.Show("Content is " + reader.ReadToEnd());
}
else
{
MessageBox.Show(string.Format("Status code == {0}", webResponse.StatusCode));
}
...しかし、reader.ReadToEnd() から返されたものを使用するには:
... JSON.NET ( http://json.codeplex.com/ ) または SimpleJson ( http://simplejson.codeplex )を使用して LINQ to JSON でデータをクエリできるように、それを json に戻す必要があります。 .com/ )
それは現実的に可能ですか (StreamReader データを JSON に変換しますか?) もしそうなら、どのように?
アップデート
このコードで「json」(またはjsonのように見える文字列)を逆シリアル化しようとしています:
string uri = "http://localhost:48614/api/departments";
var webRequest = (HttpWebRequest)WebRequest.Create(uri);
webRequest.Method = "GET";
var webResponse = (HttpWebResponse)webRequest.GetResponse();
if ((webResponse.StatusCode == HttpStatusCode.OK) && (webResponse.ContentLength > 0))
{
StreamReader reader = new StreamReader(webResponse.GetResponseStream());
DataContractJsonSerializer jasonCereal = new DataContractJsonSerializer(typeof(Department));
var dept = (Department)jasonCereal.ReadObject(reader.ReadToEnd());
MessageBox.Show(string.Format("accountId is {0}, deptName is {1}", dept.AccountId, dept.DeptName));
}
...しかし、「var dept =" 行で 2 つのエラー メッセージが表示されます。
0) The best overloaded method match for 'System.Runtime.Serialization.XmlObjectSerializer.ReadObject(System.IO.Stream)' has some invalid arguments
1) Argument '1': cannot convert from 'string' to 'System.IO.Stream'
したがって、reader.ReadToEnd() は文字列を返し、DataContractJsonSerializer.ReadObject() はストリームを期待しているようです。これに対するより良いアプローチはありますか?または、正しい道を進んでいる場合 (現在、いわば道の一部が削除されていますが)、このハードルをどのように乗り越えればよいでしょうか?
更新 2
System.Web.Extensions リファレンスを追加してから、「using System.Web.Script.Serialization;」を追加しました。しかし、このコード:
JavaScriptSerializer jss = new JavaScriptSerializer();
var dept = jss.Deserialize<Department>(s);
MessageBox.Show(string.Format("accountId is {0}, deptName is {1}",
dept.AccountId, dept.DeptName));
...しかし、2行目は次のように失敗します:
"タイプ 'bla+Department' は配列の逆シリアル化ではサポートされていません. "
jss.Deserialize() の呼び出しを受け取るのはどの型ですか? それはどのように定義されていますか?