【问题标题】:JavaScriptSerializer error: 'ResponseBody' is not supported for deserialization of an arrayJavaScriptSerializer 错误:数组的反序列化不支持“ResponseBody”
【发布时间】:2012-05-02 11:08:51
【问题描述】:

我将 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: Error while deserialization of json array 但是这里提到的制作列表的解决方案对我不起作用,或者我做错了什么。

在请求端一切正常。在响应端,正文可以有 1 个字符串或字符串数​​组。无论我有一个还是一个数组,我仍然得到同样的错误。

我不想使用 JSON.NET

【问题讨论】:

标签: c# asp.net json deserialization


【解决方案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;}        
}

【讨论】:

    【解决方案2】:

    这对我有用 -

    将body的类型改为string[]而不是List

    并将代码更改为 -

                var rbody = serializer.Deserialize<ResponseBody>(responseText);                              
                response_obj.body = new ResponseBody();
                response_obj.body.body = rbody.body.ToArray(); 
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-07
      • 1970-01-01
      • 2012-09-20
      • 1970-01-01
      • 2014-06-30
      • 2014-10-28
      • 2014-11-07
      • 2011-10-05
      相关资源
      最近更新 更多