0

我有一个 json 格式的字符串

{
"code": 0,
"message": "success",
"data": [
    {
        "data": 10,
        "total": 1000
     }
],
"page": {
    "page": 1,
    "per_page": 200,
}
}

我只是尝试通过以下代码将其转换为json,

    public class Invoice
    {
        public int data {get; set;}
        public int total { get; set; }
    }

    public class Page
    {
        public int page { get; set; }
        public int per_page { get; set; }
    }

    public class RootObject
    {
        public int code { get; set; }
        public string message { get; set; }
        public List<Lisst> Lisst{ get; set; }
        public Page Page{ get; set; }
    }
    private void Button_Click_1(object sender, RoutedEventArgs e)
    {
        var request = HttpWebRequest.Create(uri) as HttpWebRequest;
        request.Accept = "application/json;odata=verbose";
        request.Method = "GET";

        request.BeginGetResponse(new AsyncCallback(GotResponse), request);
    }
    private void GotResponse(IAsyncResult asyncResult)
    {
        try
        {
            string data;
            HttpWebRequest myhttpwebrequest = (HttpWebRequest)asyncResult.AsyncState; ;
            using (HttpWebResponse response = (HttpWebResponse)myhttpwebrequest.EndGetResponse(asyncResult))
            {
                System.IO.Stream responseStream = response.GetResponseStream();
                using (var reader = new System.IO.StreamReader(responseStream))
                {
                    data = reader.ReadToEnd();
                }
                responseStream.Close();
            }
            this.Dispatcher.BeginInvoke(() =>
                {
                    MessageBox.Show(data);
                });

                var myObjects = JsonConvert.DeserializeObject<RootObject>(data);

        }
        catch (Exception e)
        {
            var we = e.InnerException as WebException;
            System.Diagnostics.Debug.WriteLine("error : "+ we);
            if (we != null)
            {
                var resp = we.Response as HttpWebResponse;
                var code = resp.StatusCode;
                this.Dispatcher.BeginInvoke(() =>
                    {
                        MessageBox.Show("Bye");
                    });
            }
            else
                throw;
        }

当我运行此代码时,预期的输出存储为数据中的字符串,但在运行该行时

var myObjects = JsonConvert.DeserializeObject<RootObject>(data);

我收到一条错误消息,指出 Newtonsoft.Json.DLL 中发生了“System.FormatException”类型的异常,但未在用户代码中处理...这是存储为键值对的正确方法吗?

4

1 回答 1

1

这只是一个格式异常(正如它所说的那样)。JSON 格式不正确,因此在尝试将其反序列化为 RootObjects 时“无法读取”。

有关基本 json 验证的信息,请参阅以下站点,以查看此 JSON 字符串中的哪些位置存在错位字符等。

http://jsonformatter.curiousconcept.com/

将您的 JSON 粘贴到那里,您会看到有几个错误。

注意:我并不是在暗示这是在未来开发过程中验证 JSON 的一种方式。我是说,在这种情况下,这是我隔离您的异常原因的一种方式。JSON 源(“未序列化”对象)的渲染方式显然存在问题。

此外,作为旁注,这些类型的异常不应该被处理。在其中获取一些适当的 try catch 块。

于 2013-10-15T12:22:41.390 回答