Подтвердить что ты не робот

Предоставление значений DateTime в OData

В настоящее время я пишу специальное клиентское приложение, чтобы наши модульные тесты работали с интерфейсом OData, используя структуру XML для подачи Atom. Кажется, что все работает нормально, но я столкнулся с трудностями, когда мне нужно передать значение DateTime как свойство.

Я написал следующий код, который извлекает значение DateTime из свойства объекта и сохраняет его в определенном формате:

private static void GenerateProperty<T>(StringBuilder xml, T obj, PropertyInfo info)
        {
            // Extract the information about the property if it contains a value.
            if (info.GetValue(obj, null) == null) return;
            string type = info.GetGetMethod().ReturnType.ToString().Split('.').Last();
            string value = info.GetValue(obj, null).ToString();
            if (type == "DateTime")
                value = ((DateTime)info.GetValue(obj, null)).ToString("yyyy-mm-ddThh:mm:ss");
            if (type == "Boolean") value = value.ToLower();

            // Append the property to the generated XML.
            xml.Append(type.ToLower().Equals("string") ? 
                    string.Format("<d:{0}>{1}</d:{0}>", info.Name, value) : 
                    string.Format("<d:{0} m:type=\"Edm.{1}\">{2}</d:{0}>", info.Name, type, value));
        }

Код тяжелый по отражению, но это не так. Значения, возвращаемые этим кодом для DateTime, имеют следующий формат: 2011-49-13T11: 49: 41Z

Однако, я получаю следующую ошибку от моей службы OData:

Запрос обработки ошибок поток. Ошибка при преобразовании значения из полезной нагрузки запроса для свойства 'Created', чтобы ввести 'System.DateTime', который является свойство ожидаемого типа. См. Внутреннее исключение для более подробно.     Строка '2011-49-13T11: 49: 41Z' не является действительной AllXsd стоимость.     System.FormatException        в System.Xml.XmlConvert.ToDateTime(String s, XmlDateTimeSerializationMode dateTimeOption) & # xD; в System.Data.Services.Parsing.WebConvert.StringToPrimitive(текст строки, Тип targetType) & # xD; в System.Data.Services.Serializers.PlainXmlDeserializer.ConvertValuesForXml(Объект value, String propertyName, Тип typeToBeConverted)
 

По-видимому, он не понимает формат DateTime, но когда я смотрю документацию, опубликованную здесь: http://www.odata.org/developers/protocols/overview#AbstractTypeSystem

Я ожидаю, что это будет действительным. У кого-нибудь есть опыт?

4b9b3361

Ответ 1

yyyy-mm-ddThh:mm:ss

должен быть

yyyy-MM-ddTHH:mm:ssZ

Ответ 2

ToString ( "O" ) также решит проблему.