【问题标题】:Error on getting one part of a JSON response message to display in a textbox将 JSON 响应消息的一部分显示在文本框中时出错
【发布时间】:2017-07-22 17:10:45
【问题描述】:

我正在 UWP 应用程序中解析 JSON 数据,这是我目前的工作代码:

public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();

    }

    private async void Button_Click(object sender, RoutedEventArgs e)
    {


        UsersObject MyGetRequest = await GetRequest();



        ResultTextBlock.Text = MyGetRequest.ToString() + " - ";

    }


  public static async Task<UsersObject> GetRequest()
    {
        Uri geturi = new Uri("url"); //replace your url
        System.Net.Http.HttpClient client = new System.Net.Http.HttpClient();
        System.Net.Http.HttpResponseMessage responseGet = await client.GetAsync(geturi);
        string response = await responseGet.Content.ReadAsStringAsync();
        //return response;

        var json = await responseGet.Content.ReadAsStringAsync();
        var result = JsonConvert.DeserializeObject<UsersObject>(json);
        return result;
    }

还有一个 UserObject 类:

public class UsersObject { public List<UserObject> users = new List<UserObject>(); }
public class UserObject
{
    public string username { get; set; }
    public string password { get; set; }
    public int Id { get; set; }
    public object userscol { get; set; }
    public string __href { get; set; }
}

我目前在线上遇到错误:UsersObject MyGetRequest = await GetRequest();其中说:“在 mscorlib.ni.dll 中发生了 'Newtonsoft.Json.JsonSerializationException' 类型的异常,但未在用户代码中处理

附加信息:无法将当前 JSON 数组(例如 [1,2,3])反序列化为 'HttpDemo.UsersObject' 类型,因为该类型需要 JSON 对象(例如 {"name":"value"})才能反序列化正确。”

我使用的 JSON 是:

[
    {
        "username": "user1",
        "password": "10",
        "Id": 1,
        "userscol": null,
        "__href": "/db/GroupDBTest/users/Id/1.json"
    },
{
        "username": "user2",
        "password": "100",
        "Id": 2,
        "userscol": null,
        "__href": "/db/GroupDBTest/users/Id/2.json"
}

]

【问题讨论】:

  • 能否在此处调试并粘贴“json”变量的内容?
  • @Declan 问题在于反序列化来自服务器的响应。它在您期待一个对象时返回一个数组。如果没有示例响应,我能给出的最佳猜测是您应该这样做 JsonConvert.DeserializeObject&lt;UserObject[]&gt;(json);

标签: c# json uwp


【解决方案1】:

问题是您的服务器返回List&lt;UserObject&gt;。您正在尝试将其转换为仅包含 List&lt;UserObject&gt; 但本身不是 List&lt;UserObject&gt;UsersObject

您需要执行以下操作:

public static async Task<List<UserObject>> GetRequest()
{
    Uri geturi = new Uri("url"); //replace your url
    System.Net.Http.HttpClient client = new System.Net.Http.HttpClient();
    System.Net.Http.HttpResponseMessage responseGet = await client.GetAsync(geturi);
    string response = await responseGet.Content.ReadAsStringAsync();
    //return response;

    var json = await responseGet.Content.ReadAsStringAsync();
    var result = JsonConvert.DeserializeObject<List<UserObject>>(json);
    return result;
}


private async void Button_Click(object sender, RoutedEventArgs e)
{
    UsersObject myGetRequest = new UsersObject();
    myGetRequest.users = await GetRequest();

    //to iterate all users you got do this:
    foreach(var item in myGetRequest.users)
    {
        //do something
    }
}

【讨论】:

  • 这给了我 2 个错误:严重性代码描述项目文件行抑制状态无法将类型“System.Collections.Generic.List”隐式转换为“System.Collections.Generic.List' 和:名称'Console'在当前上下文中不存在
  • 抱歉第一个错误。我将在我的示例中解决这个问题。我不知道您使用的应用程序是否是控制台应用程序。只需删除console.writline ...它只是为了向您展示如何遍历您拥有的所有用户
  • 好的@DeclanS。只需再次粘贴整个内容并查看它是否编译:)
  • 我得到“在 mscorlib.ni.dll 中发生类型为 'Newtonsoft.Json.JsonReaderException' 的异常,但未在用户代码中处理其他信息:解析值时遇到意外字符:<.path>
  • 而且json-string还是一模一样?你确定你粘贴了完整的json?使用变量中的所有内容?
猜你喜欢
  • 2010-10-20
  • 1970-01-01
  • 1970-01-01
  • 2014-07-29
  • 1970-01-01
  • 2012-12-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多