0

リクエストに応じて JSON 文字列を出力する Web サービスがあります。

現在、私はこのようなクラスを受け取るように設定しています

[DataContract]
public class user_new_register
{
    [DataMember(Name="ErrorStatus")]
    public string ErrorStatus{ get; set; }
    [DataMember(Name="ErrorMessages")]
    public string []ErrorMessages { get; set; }
    [DataMember(Name="UserID")]
    public int UserID { get; set; }
}

このように文字列をサーバーに渡します

var httpReq = (HttpWebRequest)HttpWebRequest.Create (new Uri (createUser));
httpReq.BeginGetResponse ((ar) => {
var request = (HttpWebRequest)ar.AsyncState;
using (var response = (HttpWebResponse)request.EndGetResponse (ar)) {
   var s = response.GetResponseStream ();

これは機能し、「s」にはサーバーからの応答が含まれています。私の問題は、[DataContract] クラスへの返信を逆シリアル化する方法です。

以下を試してみましたが、うまくいきません

user_new_register register = new user_new_register ();
var stream = new MemoryStream ();
var serializer = new DataContractJsonSerializer (typeof(json.user_new_register));
var httpReq = (HttpWebRequest)HttpWebRequest.Create (new Uri (createUser));
httpReq.BeginGetResponse ((ar) => {
    var request = (HttpWebRequest)ar.AsyncState;
using (var response = (HttpWebResponse)request.EndGetResponse (ar)) {
    var s = response.GetResponseStream ();
        stream = (JsonObject)JsonObject.Load (s);
        register = (user_new_register)serializer.ReadObject (s);

これはコンパイルされますが、 register = 行でクラッシュします

ここで助けやアドバイスをいただければ幸いです:)

ありがとう

ポール

4

2 に答える 2

0

json.net の使用をお勧めします。約 1 年前の Monoの分岐バージョン(バージョン 4.0) がありますが、私はそれをいくつかのプロジェクトで使用しており、信頼性が高くなっています。

于 2012-12-11T00:49:12.703 に答える
0

MonoDroid プロジェクトでServiceStack.Textを使用しています。.Net の最速のシリアライザーを備えています。

また、次のように、デシリアライゼーションを DTO/モデル内のファクトリ メソッドとして配置することも好きです。

using ServiceStack.Text;

public class user_new_register
{
    public string ErrorStatus { get; set; }
    public string[] ErrorMessages { get; set; }
    public int UserID { get; set; }

    public static user_new_register FromJson(string json)
    {
        return JsonSerializer.DeserializeFromString<user_new_register>(json);
    }
}
于 2012-12-11T06:35:44.577 に答える