C# 在OData中提供日期时间值
我目前正在编写一个特殊的客户端应用程序,以允许我们的单元测试使用atom提要的XML结构与OData接口一起工作。 所有这些似乎都正常工作,但当我需要将DateTime值作为属性传递时,我遇到了麻烦 我编写了以下代码,从对象的属性中提取DateTime值并以特定格式存储它:C# 在OData中提供日期时间值,c#,.net,wcf,datetime,odata,C#,.net,Wcf,Datetime,Odata,我目前正在编写一个特殊的客户端应用程序,以允许我们的单元测试使用atom提要的XML结构与OData接口一起工作。 所有这些似乎都正常工作,但当我需要将DateTime值作为属性传递时,我遇到了麻烦 我编写了以下代码,从对象的属性中提取DateTime值并以特定格式存储它: private static void GenerateProperty<T>(StringBuilder xml, T obj, PropertyInfo info) {
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));
}
私有静态void GenerateProperty(StringBuilder xml、T obj、PropertyInfo信息)
{
//如果属性包含值,则提取该属性的相关信息。
if(info.GetValue(obj,null)==null)返回;
字符串类型=info.getMethod().ReturnType.ToString().Split('.').Last();
字符串值=info.GetValue(obj,null).ToString();
如果(类型==“日期时间”)
value=((DateTime)info.GetValue(obj,null)).ToString(“yyyy-mm-ddThh:mm:ss”);
如果(type==“Boolean”)value=value.ToLower();
//将属性附加到生成的XML。
Append(type.ToLower().Equals(“字符串”)?
字符串格式(“{1}”,信息名称,值):
string.Format(“{2}”,info.Name,type,value));
}
代码中有大量的反射,但这与问题无关。此代码返回的日期时间值的格式如下:2011-49-13T11:49:41Z
但是,我从OData服务收到以下错误:
处理请求时出错
流动转换请求有效负载的值时遇到错误
对于属性“Created”,键入“System.DateTime”,这是
属性的预期类型。有关更多信息,请参见内部异常
细节
字符串“2011-49-13T11:49:41Z”不是有效的AllXsd
价值
System.FormatException
在System.Xml.XmlConvert.ToDateTime(字符串s,
XmlDateTimeSerializationMode日期时间选项)
在
System.Data.Services.Parsing.WebConvert.StringTopPrimitive(字符串文本,
类型(目标类型)
在
System.Data.Services.Serializers.PlainXmlDeserializer.ConvertValuesForXml(对象
值,字符串属性名称,类型typeToBeConverted)显然它不理解DateTime格式,但当我看这里发布的文档时:
我希望它是有效的。有人对此有经验吗?
yyyy-mm-ddThh:mm:ss
应该是
yyyy-MM-ddTHH:MM:ssZ
ToString(“O”)也将解决此问题 这实际上不起作用。上传时,我收到一个错误,最像是因为它不支持所有额外的数字。为了完整性:如果您还需要分数秒和/或时区偏移,请使用类似于2016-04-30T23:59:59.999+02:00的内容。如果在URL中发送此信息,请确保避开“加号”:不是正确答案吗?结尾有一个“Z”?@krlzlx应该是yyyy-MM-ddTHH:MM:ssZ
您的代码没有输出Z
AFAICT,但您的错误消息显然暗示您的实际代码是。