Monotouch iOS中的SOAP响应中的System.DateTime.ParseExact错误

问题描述:

我有一个应用程序正在对另一个应用程序进行SOAP Web服务调用(这里没有JSON可能性)。一些回复很好。问题在于其中一个呼叫正常,但响应带来了System.DateTime.ParseExact错误。我查了一下日期格式SOAPUI和它回来为:2012-02-05-05:00Monotouch iOS中的SOAP响应中的System.DateTime.ParseExact错误

的错误信息是:

在System.DateTime.ParseExact(System.String S,System.String []格式的IFormatProvider提供商,DateTimeStyles样式)中的[0x0005c] /Developer/MonoTouch/Source/mono/mcs/class/corlib/System/DateTime.cs:1761 at System.DateTime.ParseExact(System.String s,System.String format,IFormatProvider provider ,DateTimeStyles样式)在/Developer/MonoTouch/Source/mono/mcs/class/corlib/System/DateTime.cs:1741 System.DateTime.ParseExact(System.String s,System.String格式,IFormatProvider提供程序中的[0x0001c] )[0x00000] in /在System.Xml.Serialization.XmlCustomFormatter.FromXmlString(System.Xml.Serialization.TypeData类型,System.String值)[0x001d4]上开发人员/ MonoTouch/Source/mono/mcs/class/corlib/System/DateTime.cs:927 在/Developer/MonoTouch/Source/mono/mcs/class/System.XML/System.Xml.Serialization/XmlCustomFormatter.cs:275 at System.Xml.Serialization.XmlSerializationReaderInterpreter.GetValueFromXmlString(System.String value,System.Xml。 Serialization.TypeData typeData,System.Xml.Serialization.XmlTypeMapping类型映射)中的[0x00047]位于System的/Developer/MonoTouch/Source/mono/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs:652 中。 Xml.Serialization.XmlSerializationReaderInterpreter.ReadPrimitiveValue(System.Xml.Serialization.XmlTypeMapElementInfo elem)/Developer/MonoTouch/Source/mono/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpr中的[0x0003e] eter.cs:638 at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadObjectElement(System.Xml.Serialization.XmlTypeMapElementInfo elem)/Developer/MonoTouch/Source/mono/mcs/class/System.XML/System.Xml中的[0x0003f]在/ Developer/MonoTouch/Source中的System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadMembers(System.Xml.Serialization.ClassMap map,System.Object ob,Boolean isValueList,Boolean readBySoapOrder)[0x0082c]中的.Serialization/XmlSerializationReaderInterpreter.cs:614 /mono/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs:464 at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadClassInstanceMembers(System.Xml.Serialization.XmlTypeMapping typeMap,System.Object ob)[0x00000 ] in /Developer/MonoTouch/Source/mono/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs:240 位于/Developer/MonoTouch/Source/mono/mcs/class/System.XML/System中的System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadClassInstance(System.Xml.Serialization.XmlTypeMapping typeMap,布尔isNullable,布尔checkType)[0x000d5]。 Xml.Serialization/XmlSerializationReaderInterpreter.cs:230 at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadObject(System.Xml.Serialization.XmlTypeMapping typeMap,Boolean isNullable,Boolean checkType)在/ Developer/MonoTouch/Source/mono/mcs中为[0x00031] /class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs:193 at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadClassInstance(System.Xml.Serialization.XmlTypeMapping typeMap,Boolean isNullable,Boolean checkType)[0x00076] in/Developer/MonoTouch/Source/mono/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs:220 位于/Developer/MonoTouch/Source/mono/mcs/class/System.XML/System中的System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadObject(System.Xml.Serialization.XmlTypeMapping typeMap,Boolean isNullable,布尔checkType)中的[0x00031]。 System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadObjectElement中的System.Xml.Serialization/XmlSerializationReaderInterpreter.cs:193 /System.Xml。Serialization/XmlSerializationReaderInterpreter.cs:620 at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadMembers(System.Xml.Serialization.ClassMap map,System.Object ob,Boolean isValueList,Boolean readBySoapOrder)/ Developer/MonoTouch/Source中的[0x005fb]在System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadClassInstanceMembers(System.Xml.Serialization.XmlTypeMapping类型映射,System.Object ob)中设置单声道/ mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs:434 [0x00000]在/Developer/MonoTouch/Source/mono/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs:240 at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadClassInstance(System.Xml.Serialization.XmlTypeMapping typeMap,布尔isNullable,布尔checkType)/Developer/MonoTouch/Source/mono/mcs/class/System.XML/System.Xml中的[0x000d5]。 Serialization/XmlSerializationReaderInterpreter.cs:230 at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadObject(System.Xml.Serialization.XmlTypeMapping typeMap,Boolean isNullable,Boolean checkType)/ Developer/MonoTouch/Source/mono/mcs/class中的[0x00031] /System/XmlSerializationReaderInterpreter.cs:193 at/Developer/MonoTouch/Source/mono/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter.cs:620 at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadMembers(System.Xml.Serialization.ClassMap map,System.Object ob,Boolean isValueList,Boolean readBySoapOrder )/Developer/MonoTouch/Source/mono/mcs/class/System.XML/System.Xml.Serialization/XmlSerializati中的[0x005fb] onReaderInterpreter.cs:434 at System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadMessage(System.Xml.Serialization.XmlMembersMapping typeMap)/Developer/MonoTouch/Source/mono/mcs/class/System.XML/System.Xml中的[0x0015a] .Serialization/XmlSerializationReaderInterpreter.cs:位于/Developer/MonoTouch/Source/mono/mcs/class/System.XML/System.Xml.Serialization/XmlSerializationReaderInterpreter中System.Xml.Serialization.XmlSerializationReaderInterpreter.ReadRoot()[0x0004c]处的154 。 cs:92 at /Developer/MonoTouch/Source/mono/mcs/class/System.XML/System.Xml.Serialization中的System.Xml.Serialization.XmlSerializer.Deserialize(System.Xml.Serialization.XmlSerializationReader reader)[0x0001c] /XmlSerializer.cs:361

This看起来并不像一个问题(见注)但是,如果我错了,这里为什么...

case "date": return DateTime.ParseExact (value, "yyyy-MM-dd", null); 

XmlCustomFormatter.cs(来源GitHub上可用)的路线#275,显示格式(右或错误)Mono预计日期。

这与您在问题中提供的2012-02-05-05:00字符串不匹配,这会导致您现在遇到的异常。这可能是Mono中的一个错误,或者如果Microsoft实现的行为相同,则说明您正在调用的Web服务存在问题。

注: bug报告在http://bugzilla.xamarin.com

+0

感谢您的回复。我有一个ASP.NET版本的应用程序,我没有这个问题。完全相同的代码和Web服务。这似乎是一个单声道错误。 – EICSB 2012-04-17 21:34:33

+0

你能想到一种方法,我可以在我的C#代码覆盖这个? – EICSB 2012-04-17 21:41:44

充满我已经看到了这之前一对夫妇几年前,它已经停止了我几个移植的Web服务项目单。我可以确认Mono的行为与Microsoft .Net不同。我不清楚它是否是一个错误,但许多Web服务以'yyyy-mm-dd'以外的格式返回日期,有些添加'Z'或其他时区规格,有些有时间。您可以修补Mono以使用System.DateTime.Parse,但是为此只能使用自定义Mono构建。