2014-09-26 2 views
1

У меня есть xml, где TimeStamp не установлен. Я перепробовал все возможные комбинации здесь, но на десериализации всегда бросает исключение с: There was an error deserializing the object of type MyType. The value '' cannot be parsed as the type 'DateTime'.Как сделать datamember необязательным при десериализации?

[DataMember(IsRequired = false, EmitDefaultValue = false)] 
    public DateTime TimeStamp = DateTime.Now; 

Что именно мне нужно установить на этом элементе TIMESTAMP, так что это не является обязательным на десериализации (= не требуется, чтобы быть в XML-)

EDIT: То, что я пытался по предложению Xaruth в:

[DataMember] 
[DefaultValue(typeof(DateTime), "2014-08-25T09:31:09.2477328+02:00")] 
public DateTime TimeStamp { get; set; } 

public bool ShouldSerializeTimeStamp() 
{ 
    return TimeStamp != null; 
} 

public void ResetTimeStamp() 
{ 
    TimeStamp = DateTime.Now; 
} 
+0

Не включайте в процесс сериализации. Так как это необязательный член; не пропускайте его во время использования метода/операции обслуживания. – Rahul

+0

Rahul Я сериализуюсь в/из xml. Проблема возникает при попытке десериализовать уже существующий xml, у которого нет Timestamp вообще, но я все же хочу, чтобы он deserialize без исключений. – Blub

ответ

0

Вы можете использовать методы SouldSerialize и Reset, которым может быть определить для каких-либо свойств.

Для свойства называется TimeStamp, вы можете написать методы SouldSerializeTimeStamp и ResetTimeStamp

Согласно MSDN, ResetTimeStamp даст вам значение по умолчанию для TimeStamp и SouldSerializeTimeStamp будут использоваться для сериализации или не TimeStamp.

+0

, который, похоже, не связан с сериализацией Datacontracts/Datamember – Blub

+0

Это действительно так;) Попробуйте и посмотрите, не ответит ли он на вашу проблему. – Xaruth

+0

Xaruth Я попробовал ваше предложение, но все тот же вопрос. Я редактировал свой пост. – Blub

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