【问题标题】:Parsing data from json in C#在 C# 中从 json 解析数据
【发布时间】:2017-06-04 18:41:34
【问题描述】:

我成功将数据发送到var content 我是怎么做的代码:

public async void FetchAsync()
{
    var client = new RestClient("http://api.locopal.com");
    var request = new RestRequest("/countries", Method.POST);
    var response = client.Execute(request);
    var content = response.Content;
    var responseCountries = JArray.Parse(JObject.Parse(content)[""].ToString());
}

但在行:var responseCountries = JArray.Parse(JObject.Parse(content)[""].ToString()); 我得到了一个未处理的异常发生。 这是来自var content 的数据:

这里的国家/地区需要写下来列出。

【问题讨论】:

  • 有什么异常?您在 JObject.Parse(content)[""] 中传递了空字符串,这可能是原因?
  • 如果您在 C# 中建模 JSON 时遇到困难,以后可以使用 json2csharp.com
  • 参考我的回答here 了解如何做你想做的事

标签: c# json parsing xamarin.android


【解决方案1】:

你可以像下面这样声明一个类

public class Country
{
    [JsonProperty("id")]
    public int Id { get; set; } 

    [JsonProperty("nicename")]
    public string Name { get; set; }
}

然后反序列化json如下:

var responseCountries = JsonConvert.DeserializeObject<IEnumerable<Country>>(content);

【讨论】:

  • var responseCountries = JsonConvert.DeserializeObject&lt;IEnumerable&lt;RootObjectCountries&gt;&gt;(content); 为我工作
  • @S.Koshelnyk 是的,它需要DeserializeObject。谢谢!
  • 如果您提供 IEnumerable 作为泛型类型参数,看起来 Newtonsoft.Json 将反序列化为 Collections.Generic.List。 IMO,为了清晰和性能,你应该说DeserializeObject&lt;List&lt;Country&gt;&gt;
【解决方案2】:

您应该将deserialize JSON 转换为一个对象。您可以使用 JSON 中的属性创建 POCO 对象。

示例:

public class Country
{
    [JsonProperty("id")]
    public int Id { get; set; }

    [JsonProperty("nicename")]
    public string Name { get; set; }
}

编辑:遵循与 JSON 相同的大小写

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-04-02
    • 1970-01-01
    • 2012-03-26
    • 1970-01-01
    • 2018-03-19
    • 1970-01-01
    • 2015-05-29
    相关资源
    最近更新 更多