如何使用Settings类指定DateTime类型

本文关键字:DateTime 类型 何使用 Settings | 更新日期: 2023-09-27 18:22:16

默认情况下,Settings类不会将DateTime类型的信息存储到配置文件中,如何序列化DateTime,以便在保存和检索时保持类型不变?

如何使用Settings类指定DateTime类型

希望这会有所帮助。我使用Json.NET库来进行序列化和内存流。您需要做的第一件事是确保DateTime对象具有您期望的Kind。我使用LINQPad.NET创建了这个小演示。我使用了传说中的转储方法

.Dump()

此方法将获取.NET DateTime对象,并将值吐出到结果窗口中。正如你所看到的,我已经瞄准了你所询问的Kind房产。

void Main()
{
    var date = new DateTime(2015, 12, 25, 0, 0, 0, DateTimeKind.Local);
    date.Kind.Dump();
    using (var memoryStream = new MemoryStream())
    {
        Serialize(date, memoryStream);
        memoryStream.Position = 0;
        var deserializedDate = Deserialize<DateTime>(memoryStream);
        deserializedDate.Kind.Dump();
    }
}
// Define other methods and classes here
public static void Serialize( object value, Stream s ) 
{
    StreamWriter writer = new StreamWriter(s);
    JsonTextWriter jsonWriter = new JsonTextWriter(writer);
    JsonSerializer ser = new JsonSerializer();
    ser.Serialize(jsonWriter, value);
    writer.Flush();     
}
public static T Deserialize<T>(Stream s) 
{
    T result;
    using (StreamReader reader = new StreamReader(s))
    {
        JsonTextReader jsonReader = new JsonTextReader(reader);
        JsonSerializer ser = new JsonSerializer();
        result = ser.Deserialize<T>(jsonReader);
    }   
    return result;
}

播放此演示代码,将本地类型从DateTimeKind.local更改为DateTimeKind.Utc,并验证这是否适用于您。如果你有任何问题,我很乐意帮忙。

我一直在寻找一个比dacke.geo的anwers更简单的解决方案,所以我用一个解决方案来回答我自己的问题。尽管这并不能详尽地回答我最初的问题,但在我的情况下,使用访问器并假设Utc时间可以完成任务:

internal static DateTime MyDate
{
    get { return DateTime.SpecifyKind(Properties.Settings.Default.MyDate, DateTimeKind.Utc); }
    set { Properties.Settings.Default.MyDate = value.ToUniversalTime(); }
}