C# - 在类中存储数据

时间:2014-05-30 01:45:20

标签: c#

我正在尝试了解如何查询提供天气信息的网络服务。该服务输出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;
        }
}

我的问题:我不知道采用哪种方式。哪种方法是“正确的”,为什么会这样呢?为什么我会使用另一种方式?

2 个答案:

答案 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或填充类属性。