Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在OData中提供日期时间值_C#_.net_Wcf_Datetime_Odata - Fatal编程技术网

C# 在OData中提供日期时间值

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) {

我目前正在编写一个特殊的客户端应用程序,以允许我们的单元测试使用atom提要的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));
        }
私有静态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,但您的错误消息显然暗示您的实际代码是。