我正在尝试了解如何查询提供天气信息的网络服务。该服务输出XML。
我不确定如何将检索到的信息存储在类中。在互联网上看似乎有两种方法。
要么这样:
class CurrentWeather
{
public string CityName { get; set; }
public int TemperatureC { get; set; }
public int TemperatureF { get; set; }
public int WindSpeedMph { get; set; }
//Lots and lots of more weather related properties
}
或者这样:
class CurrentWeather
{
public string CityName { get; set; }
public double TemperatureC { get; set; }
public double TemperatureF { get; set; }
public double WindSpeedMph { get; set; }
public CurrentObservation(string cityName, double temperatureC, double temperatureF, double windSpeedMph)
{
CityName = cityName;
TemperatureC = temperatureC;
TemperatureF = temperatureF;
WindSpeedMph = windSpeedMph;
}
}
我的问题:我不知道采用哪种方式。哪种方法是“正确的”,为什么会这样呢?为什么我会使用另一种方式?
答案 0 :(得分:0)
第二种可能更适合支持反序列化,但我可能会考虑稍微破解数据。保持数据封装,以便相关数据保持在一起。你的确切结构取决于你,但我可能会分解如下:
public class CurrentConditions {
public City CurrentCity { get; set;}
public Temperature[] TemperatureReadings {get; set;}
public Wind[] WindCondtions {get; set;}
}
public class City {
public string Name {get; set;}
}
public enum TemperatureScale { Celsius, Fahrenheit }
public enum SpeedScale { MPH, KPH }
public class Temperature {
public int Degrees {get; set;}
public TemperatureScale Scale {get; set;}
}
etc.
它保持数据的有序性。如果您正在进行更改等,则只允许传递和/或更新您需要的特定详细信息。
如果您发布了XML,我会更好地了解如何将XML元素映射到对象。
答案 1 :(得分:0)
它们与存储数据的方式完全相同,唯一的区别是你添加了一个构造函数,以确保在实例化类时填充所有参数。
但它有一个缺点,没有空构造函数的类无法通过序列化程序实例化。
为什么我这么说?因为如果您正在接收格式良好的XML并且将类结构编码为该XML中的数据,则可以使用XmlSerializer将XML反序列化为该类的实例,而无需解析XML或填充类属性。