1

json 文字列を http 要求として送信し、応答で json 文字列を受信して​​います。シリアル化および逆シリアル化する独自のクラスを作成しました。それらは次のようになります。

リクエスト側 -

public class RequestHead
{        
    public string source {get; set;}        
    public string dest {get; set;}        
}

public class RequestBody
{
    private List<string> id {get; set;}        
    public bool direction {get; set;}

    public RequestBody()
    {
        this.id = new List<string>();
    }
}

public class RequestObj
{        
    public RequestHead head {get; set;}
    public RequestBody body {get; set;}
}

レスポンス側 -

public class ResponseHead
{        
    public bool result {get; set;}        
    public float time {get; set;}        
}

public class ResponseBody
{        
    public List<string> body{get; set;}
}

public class ResponseObj
{        
    public ResponseBody body {get; set;}        
    public ResponseHead head {get; set;}        
}

.asmx ファイル内

            RequestObj request_obj = new RequestObj();
            request_obj.head = head;
            request_obj.body = body;

            var httpWebRequest = (HttpWebRequest)WebRequest.Create("the url");
            httpWebRequest.ContentType = "text/json";
            httpWebRequest.Method = "POST";
            JavaScriptSerializer serializer = new JavaScriptSerializer();

            using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
            {
                string json = serializer.Serialize(request_obj);
                streamWriter.Write(json);
            }
            var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
            using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
            {
                var responseText = streamReader.ReadToEnd();
                ResponseObj response_obj = new ResponseObj();
                response_obj = serializer.Deserialize<ResponseObj>(responseText);
                ResponseBody response_body = new ResponseBody();
                response_body = response_obj.body;
                ResponseHead response_head = new ResponseHead();
                response_head = response_obj.head;                    
            }

私はまさに私が持っているシナリオであるこの投稿を参照しました - System.MissingMethodException: json 配列の逆シリアル化中にエラーが発生 しましたが、リストを作成するここで述べた解決策がうまくいかないか、何か間違ったことをしています。

すべてがリクエスト側でうまく機能します。応答側では、本文に 1 つの文字列または文字列の配列を含めることができます。1つでも配列でも、同じエラーが発生します。

JSON.NET を使用したくない

4

2 に答える 2

1

[Serializable]問題は、フラグを次のように設定していないことだと思います。

[Serializable]
public class ResponseHead
{        
    public bool result {get; set;}        
    public float time {get; set;}        
}

[Serializable]
public class ResponseBody
{        
    public List<string> body{get; set;}
}

[Serializable]
public class ResponseObj
{        
    public ResponseBody body {get; set;}        
    public ResponseHead head {get; set;}        
}
于 2012-04-21T06:16:37.493 に答える
0

これは私のために働いたものです -

body のタイプを List ではなく string[] に変更します

コードを次のように変更します -

            var rbody = serializer.Deserialize<ResponseBody>(responseText);                              
            response_obj.body = new ResponseBody();
            response_obj.body.body = rbody.body.ToArray(); 
于 2012-04-23T16:32:29.513 に答える