2010-04-21 5 views
0

Как десериализации "<MyType> <STARTDATE> 01.01.2000 </StartDate > </MyType >"Как десериализации "<MyType><StartDate> 01.01.2000</StartDate></MyType>"

ниже определение MyType

[Serializable] 
public class MyType 
{ 
    DateTime _StartDate; 
    public DateTime StartDate 
    { 
     set 
     { 
      _StartDate = value; 
     } 
     get 
     { 
      return _StartDate; 
     } 
    } 
} 

Получили следующее сообщение об ошибке при десериализации

{ "Строка '01/01/2000' не является допустимым значением AllXsd. "} [System.FormatException]: {" Строка '01/01/2000' не является допустимым значением AllXsd . "} Данные: {System.Collections.ListDictionaryInternal} HelpLink: null InnerException: null Сообщение:« Строка '01/01/2000 'не является допустимым значением AllXsd. " Источник: "System.Xml" StackTrace: "в System.Xml.Schema.XsdDateTime..ctor (String текста, XsdDateTimeFlags видов) \ г \ п на System.Xml.XmlConvert.ToDateTime (String s, XmlDateTimeSerializationMode dateTimeOption) \ г \ п на System.Xml.Serialization.XmlCustomFormatter.ToDateTime (String значение) \ г \ п на System.Xml.Serialization.XmlSerializationReader.ToDateTime ( значение String) \ г \ п на Microsoft .Xml.Serialization.GeneratedAssembly.XmlSerializationReaderMyType.Read2_MyType (Boolean isNullable, Boolean checkType) \ r \ n
at Microsoft.Xml.Seri alization.GeneratedAssembly.XmlSerializationReaderMyType.Read3_MyType()» TargetSite: {Пустота .ctor (System.String, System.Xml.Schema.XsdDateTimeFlags)}

ответ

0

Короче я думаю, что вы не делаете. Ваша проблема в том, что XmlSerializer пытается разобрать 01/01/2000 на значение DateTime, но 01/01/2000 не является valid XML date.

Как создается строка XML? У вас есть контроль над этим кодом? Если это так, используйте метод XmlConvert.ToString(DateTime), чтобы получить строку, соответствующую стандарту.

+0

@Fredrik: Нет, у меня нет контроля над строкой XML-строк. Он отправляется от клиента. В моей стороне я пытаюсь десериализовать заданную строку xml. – afin

1

Вероятно, десериализатор DateTime ожидает другого формата, который у вас есть.

Формата Я использую выглядит следующим образом:

2010-01-20T13:40 

(Это для UTC DateTime, вы можете также иметь часовые пояса на конце строки)

я использую этот формат для отправки с свойствами [DataMember], и DataContractSerializer отлично справляется с этим, поэтому я думаю, что он будет работать и с Xml Serialization.

Существует сообщение об ошибке, которую вы получаете here, которая выглядит так, как будто это может быть полезно.

2

Если вы действительно не можете управлять входным XML, но все равно должны его разобрать (несмотря на то, что вы не соблюдаете его), что-то вроде того, что я делал в прошлом.

[Serializable] 
public class MyType 
{ 
    DateTime _StartDate; 
    public string StartDate 
    { 
     set 
     { 
      _StartDate = DateTime.Parse(value); 
     } 
     get 
     { 
      return _StartDate.ToShortDateString(); 
     } 
    } 
} 
+0

@awlawl: Итак, нет способа десериализации типа DateTime? – afin

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