По умолчанию Класс настроек не хранит информацию о типе DateTime в файле конфигурации, как я могу сериализовать DateTime так, чтобы он был сохранен и извлечен с сохранением целостности?Как указать тип DateTime с помощью класса настроек?
ответ
Надеюсь, это поможет. Я использовал библиотеку Json.NET для выполнения сериализации и потока памяти. Одна из первых вещей, которые вам нужно сделать, это убедиться, что ваш объект DateTime имеет вид, который вы ожидаете от него. Я использовал 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 и убедитесь, что это работает для вас. Если у вас возникнут какие-либо вопросы, я буду рад помочь.
Я искал более простое решение, чем анкеты dacke.geo, поэтому я отвечаю на свой вопрос с решением, с которым я согласился. Хотя это не ответ на мой первоначальный вопрос исчерпывающе, с помощью аксессора и предполагая Utc время получает работу в моем случае:
internal static DateTime MyDate
{
get { return DateTime.SpecifyKind(Properties.Settings.Default.MyDate, DateTimeKind.Utc); }
set { Properties.Settings.Default.MyDate = value.ToUniversalTime(); }
}
- 1. Как указать тип типа класса
- 2. Как указать тип возврата метода абстрактного класса
- 3. Как указать тип класса в app.config?
- 4. Как указать тип атрибута класса в PHP?
- 5. Как указать тип для ограничения класса?
- 6. Как указать тип для класса с свойством 'name'?
- 7. Как указать общий тип с?
- 8. Java Generics: как указать тип класса для типичного типизированного класса?
- 9. Как указать последнее время дня с DateTime
- 10. Указать общий тип класса в аргументе согласовани
- 11. Как указать тип с ограничениями?
- 12. способ указать тип класса объекта в PHP
- 13. Как разрешить тип класса с помощью enum
- 14. Как указать свойство «Тип файла»
- 15. ВЫБРАТЬ указать формат DATETIME
- 16. Django: Как указать путь к файлу настроек
- 17. Как указать несколько условий и тип условия с помощью Zend_Db_Table
- 18. Как указать тип для нового столбца с помощью оператора выбора
- 19. Внедрение класса наблюдаемых настроек
- 20. Как указать экземпляры определенного класса?
- 21. как очистить входной тип = «DateTime» с помощью Javascript
- 22. Как указать тип BLOB в MS Access?
- 23. Язык смены настроек с помощью меню настроек
- 24. Как указать общий тип коллекции для общего класса?
- 25. Как указать тип CollectionType для общей структуры/класса?
- 26. Как указать тип данных для datatable colums?
- 27. Как указать инъекцию установщика для статического класса с помощью StructureMap?
- 28. Невозможно разобрать тип DateTime
- 29. Как указать тип значения JSON?
- 30. Как указать тип результата MatExpr?
Извините, если я включил слишком много информации, я был в предположении, что вам нужно для сериализации поэтому я представил пример с помощью Json. Я рад, что вы нашли решение, которое работает на вас. –