2015-11-16 2 views

ответ

0

Надеюсь, это поможет. Я использовал библиотеку 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 и убедитесь, что это работает для вас. Если у вас возникнут какие-либо вопросы, я буду рад помочь.

0

Я искал более простое решение, чем анкеты dacke.geo, поэтому я отвечаю на свой вопрос с решением, с которым я согласился. Хотя это не ответ на мой первоначальный вопрос исчерпывающе, с помощью аксессора и предполагая Utc время получает работу в моем случае:

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

Извините, если я включил слишком много информации, я был в предположении, что вам нужно для сериализации поэтому я представил пример с помощью Json. Я рад, что вы нашли решение, которое работает на вас. –

Смежные вопросы