【问题标题】:Howto specify DateTime kind with Settings class?如何使用 Settings 类指定 DateTime 类型?
【发布时间】:2015-11-16 17:33:25
【问题描述】:

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

【问题讨论】:

    标签: c# datetime application-settings


    【解决方案1】:

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

    .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 并验证这是否适合您。如果您有任何问题,我很乐意为您提供帮助。

    【讨论】:

      【解决方案2】:

      我一直在寻找比 dacke.geo 的答案更简单的解决方案,所以我正在用我解决的解决方案来回答我自己的问题。虽然这并没有详尽地回答我最初的问题,但使用访问器并假设 Utc 时间可以完成我的工作:

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

      【讨论】:

      • 对不起,如果我包含了太多信息,我假设您需要序列化信息,所以我提供了一个使用 Json 的示例。很高兴您找到了适合您的解决方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-29
      • 1970-01-01
      • 2016-02-29
      • 1970-01-01
      • 1970-01-01
      • 2010-12-02
      • 2021-11-21
      相关资源
      最近更新 更多