C# 获取 JSON 对象

标签 c# json multithreading parsing object

所以我有一个 City 类,我希望它能够获取和存储 JSON 数据。

    public string status { get; set; }
    public string id { get; set; }
    public string country { get; set; }
    public string region { get; set; }
    public string mainCity { get; set; }
    public string latitude { get; set; }
    public string longitude { get; set; }
    public string comment { get; set; }
    public bool wasThereAnError { get; set; }

    public class CityResponse
    {
        public string status { get; set; }
        public string Message { get; set; }
        public List<City> result { get; set; }
    }

在我的应用程序中,我需要通过 ID 请求城市或通过国家代码显示城市列表,因此我希望城市成为基类。

这是我试图用来实现这一目标的代码。它在 WebRetrieval 类中

    async private Task<City> GetCityInformation(string url)
    {
        var client = new HttpClient();
        var response = await client.GetAsync(new Uri(url));

        string result = await response.Content.ReadAsStringAsync();

        //var cityRootaaa = JsonConvert.DeserializeObject<City.CityResponse>(result);
        var cityRoot = JsonConvert.DeserializeObject<City>(result);
        return cityRoot;
}

    //Return City
    async public Task<City> GetCity(string url)
    {
        City city = await GetCityInformation(url);
        return city;
    }

然后当我尝试在 City_Page 类中创建一个 City 对象时,我使用这个:

            long cityNum = Convert.ToInt64(CityID_Textbox.Text);
            string url = "http://honey.computing.dcu.ie/city/city.php?id=" + cityNum;


            City city = wr.GetCity(url);
            myTextBlock1.Text = city.ToString();

我不断收到关于 System.Threading.tasks.task 无法转换为 CityApp.City 的错误。

我真的很困惑,我不知道该怎么办。现在代码坏了,我不知道如何修复它。所以我真的很感激任何帮助。 谢谢

最佳答案

改变

City city = wr.GetCity(url);

City city = wr.GetCity(url).Result;

如果您使用的是 .Net 4.0;如果您使用的是 4.5,则

City city = await wr.GetCity(url);

此外,您返回的是 CityResponse,而不仅仅是一个城市; Json 无法反序列化,因为它缺少 [] 来定义数组。如果您执行以下操作

        var cityResponse = new CityResponse();
        cityResponse.status = "okay";
        cityResponse.result = new List<City>();
        var city = new City();
        city.Status = "0";
        city.Id = "1";
        city.Country = "2";
        city.Region = "3";
        city.MainCity = "4";
        city.Latitude = "5";
        city.Longitude = "6";
        city.Comment = "7";
        city.WasThereAnError = false;

        cityResponse.result.Add(city);

        var jsonString = JsonConvert.SerializeObject(cityResponse);

jsonString 将是

"{\"status\":\"okay\",\"Message\":null,\"result\":[{\"Status\":\"0\",\"Id\":\"1\",\"国家/地区\":\"2\",\"地区\":\"3\",\"主要城市\":\"4\",\"纬度\":\"5\",\"经度\":\"6\",\"注释\":\"7\",\"WasThereAnError\":false}]}"

关于C# 获取 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19963589/

相关文章:

c# - WPF 用户控件依赖属性未绑定(bind)

json - 如何定义和使用 JSON-LD 中的模式?

javascript - 尝试从 jQuery 提交异步调用时在有效 URL 上获取 404

c# - LINQ 等于 - 它在幕后调用什么?

c# - 如何解决这个 c# 语法难题?

java - 测试 JSONProcessingException

json - ExtJS4 如何从 JSON 设置 TreePanels 根节点

android - 线程中的蓝牙通信或 Android 中的服务?

c# - 为什么局部变量在 C# 中不能是 volatile 的?

Java多线程切换上下文VS提交新任务以及监控队列的解决方案