Как десериализовать "<MyType><StartDate> 01/01/2000 </StartDate></MyType>" - PullRequest
0 голосов
/ 21 апреля 2010

Как десериализовать " 01/01/2000 "

ниже приведено определение 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: ноль InnerException: ноль Сообщение: «Строка '01 / 01/2000 'не является допустимым значением AllXsd." Источник: "System.Xml" StackTrace: "at System.Xml.Schema.XsdDateTime..ctor (String текст, виды XsdDateTimeFlags) \ r \ n в System.Xml.XmlConvert.ToDateTime (String s, XmlDateTimeSerializationMode dateTimeOption) \ r \ n в System.Xml.Serialization.XmlCustomFormatter.ToDateTime (String значение) \ r \ n в System.Xml.Serialization.XmlSerializationReader.ToDateTime (String значение) \ r \ n в Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderMyType.Read2_MyType (Boolean isNullable, логический checkType) \ r \ n
в Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationReaderMyType.Read3_MyType ()» TargetSite: {Void .ctor (System.String, System.Xml.Schema.XsdDateTimeFlags)}

Ответы [ 3 ]

2 голосов
/ 21 апреля 2010

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

[Serializable]
public class MyType
{
    DateTime _StartDate;
    public string StartDate
    {
        set
        {
            _StartDate = DateTime.Parse(value);
        }
        get
        {
            return _StartDate.ToShortDateString();
        }
    }
}
1 голос
/ 21 апреля 2010

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

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

2010-01-20T13:40

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

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

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

0 голосов
/ 21 апреля 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...