繁体   English   中英

从JSON数据构建对象?

[英]Building object from JSON data?

因此,当我从服务器获取JSON数据时,我想构建一个City类。

public class City
{
    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; }
    }

    public override string ToString()
    {
        return "\n\nID: \t\t" + id + "\nCountry: \t" + country + "\nRegion: \t\t" + region + "\nCity: \t\t" + mainCity + "\nLatitude: \t" + latitude + "\nLongitude: \t" + longitude + "\nComment: \t" + comment;
    }
}

多数民众赞成在那堂课。 所以当我查询例如:

    {"status":"okay","result":{"id":1,"country":"US","region":"NY","city":"Valhalla","latitude":41.0877,"longitude":-73.7768,"comment":"890068 monkeys"}}

我希望City类填充相应的数据。 这是我获取数据的Web检索类。

        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;
    }
}

但是,当我调试时,我看不到任何保存。 最初,我在City中的id上方有另一个状态字段,当我调试时,状态字段中设置了“好”,但是没有其他数据。 我不确定该怎么办? 谢谢你的帮助!

您的json字符串包含具有两个属性的对象,即status和city对象,因此您要反序列化字符串的类型应为:

public class CityResponse
{
    public string status { get; set; }
    public City result { get; set; }
}

现在您可以像这样反序列化

var cityResponse = JsonConvert.DeserializeObject<CityResponse>(result);
return cityResponse.City;

或者,如果您不想引入新类型,也可以使用匿名对象

var cityResponseType = new { status = string.Empty, result = new City() };
var cityResponse = JsonConvert.DeserializeAnonymousType(result, cityResponseType);
return cityResponse.result;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM