我目前正在编写一个特殊的客户端应用程序,以允许我们的单元测试使用原子提要的XML结构来处理OData接口。 一切似乎都正常工作,但是当我需要将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) 在 System.Data.Services.Parsing.WebConvert.StringToPrimitive(String text, 输入targetType) 在 System.Data.Services.Serializers.PlainXmlDeserializer.ConvertValuesForXml(对象 value,String propertyName,Type typeToBeConverted)
显然它不理解DateTime格式,但当我查看发布在此处的文档时:http://www.odata.org/developers/protocols/overview#AbstractTypeSystem
我希望它有效。有人有这方面的经验吗?
答案 0 :(得分:20)
yyyy-mm-ddThh:mm:ss
应该是
yyyy-MM-ddTHH:mm:ssZ
答案 1 :(得分:3)
ToString(“O”)也可以解决问题。