【问题标题】:Web Services Error Generating XML in Xamarin.Android在 Xamarin.Android 中生成 XML 的 Web 服务错误
【发布时间】:2014-12-31 12:58:22
【问题描述】:

我正在尝试将一组自定义对象发送到 Web 方法 (.asmx),但它引发了序列化错误。从 Web 项目调用 Web 方法时工作正常,但 Xamarin 正在苦苦挣扎,当我单击“显示详细信息”时,xamarin 会抛出自己的错误,即“路径中的非法字符”,这对我没有帮助调试工作。

据我所知,自定义对象的属性中没有“非法字符”;它们都是基本类型,例如 int、string 等。

有没有人遇到过这个问题,或者知道我该如何调试?

完整的错误信息:

 System.InvalidOperationException has been thrown
    There was an error generating the XML document.

出现在这段代码 sn-p 处(来自网络参考生成的 Reference.cs):

        public void InsertClockEntries(ClockentryPublicInfo[] entries) {
            this.Invoke("InsertClockEntries", new object[] {
                        entries});
        }

编辑:这是来自 Android 日志的堆栈跟踪:

E/mono-rt ( 6638): [ERROR] FATAL UNHANDLED EXCEPTION: System.InvalidOperationException: There was an error generating the XML document. ---> System.InvalidOperationException: '10' is not a valid value for MobileTimeClock.secure.timedock.com.v2.ClockingAction.

E/mono-rt ( 6638):   at System.Xml.Serialization.EnumMap.GetXmlName (System.String typeName, System.Object enumValue) [0x00000] in <filename unknown>:0 

E/mono-rt ( 6638):   at System.Xml.Serialization.XmlSerializationWriterInterpreter.GetEnumXmlValue (System.Xml.Serialization.XmlTypeMapping typeMap, System.Object ob) [0x00000] in <filename unknown>:0 

E/mono-rt ( 6638):   at System.Xml.Serialization.XmlSerializationWriterInterpreter.GetStringValue (System.Xml.Serialization.XmlTypeMapping typeMap, System.Xml.Serialization.TypeData type, System.Object value) [0x00000] in <filename unknown>:0 

E/mono-rt ( 6638):   at System.Xml.Serialization.XmlSerializationWriterInterpreter.WritePrimitiveValueLiteral (System.Object memberValue, System.String name, System.String ns, System.Xml.Serialization.XmlTypeMapping mappedType, System.Xml.Serialization.TypeData typeData, Boolean wrapped, Boolean isNullable) [0x00000] in <filename unknown>:0 

E/mono-rt ( 6638):   at System.Xml.Serialization.XmlSerializationWriterInterpreter.WriteMemberElement (System.Xml.Serialization.XmlTypeMapElementInfo elem, System.Object memberValue) [0x00000] in <filename unknown>:0 

E/mono-rt ( 6638):   at System.Xml.Serialization.XmlSerializationWriterInterpreter.WriteElementMembers (System.Xml.Serialization.ClassMap map, System.Object ob, Boolean isValueList) [0x00000] in <filename unknown>:0 

E/mono-rt ( 6638):   at System.Xml.Serialization.XmlSerializationWriterInterpreter.WriteObjectElementElements (System.Xml.Serialization.XmlTypeMapping typeMap, System.Object ob) [0x00000] in <filename unknown>:0 

E/mono-rt ( 6638):   at System.Xml.Serialization.XmlSerializationWriterInterpreter.WriteObjectElement (System.Xml.Serialization.XmlTypeMapping typeMap, System.Object ob, System.String element, System.String namesp) [0x00000] in <filename unknown>:0 

E/mono-rt ( 6638):   at System.Xml.Serialization.XmlSerializationWriterInterpreter.WriteObject (System.Xml.Serialization.XmlTypeMapping typeMap, System.Object ob, System.String element, System.String namesp, Boolean isNullable, Boolean needType, Boolean writeWrappingElem) [0x00000] in <filename unknown>:0 

E/mono-rt ( 6638):   at System.Xml.Serialization.XmlSerializationWriterInterpreter.WriteMemberElement (System.Xml.Serialization.XmlTypeMapElementInfo elem, System.Object memberValue) [0x00000] in <filename unknown>:0 

E/mono-rt ( 6638):   at System.Xml.Serialization.XmlSerializationWriterInterpreter.WriteListContent (System.Object container, System.Xml.Serialization.TypeData listType, System.Xml.Serialization.ListMap map, System.Object ob, System.Text.StringBuilder targetString) [0x00000] in <filename unknown>:0 

E/mono-rt ( 6638):   at System.Xml.Serialization.XmlSerializationWriterInterpreter.WriteMemberElement (System.Xml.Serialization.XmlTypeMapElementInfo elem, System.Object memberValue) [0x00000] in <filename unknown>:0 

E/mono-rt ( 6638):   at System.Xml.Serialization.XmlSerializationWriterInterpreter.WriteElementMembers (System.Xml.Serialization.ClassMap map, System.Object ob, Boolean isValueList) [0x00000] in <filename unknown>:0 

E/mono-rt ( 6638):   at System.Xml.Serialization.XmlSerializationWriterInterpreter.WriteMembers (System.Xml.Serialization.ClassMap map, System.Object ob, Boolean isValueList) [0x00000] in <filename unknown>:0 

E/mono-rt ( 6638):   at System.Xml.Serialization.XmlSerializationWriterInterpreter.WriteMessage (System.Xml.Serialization.XmlMembersMapping membersMap, System.Object[] parameters) [0x00000] in <filename unknown>:0 

E/mono-rt ( 6638):   at System.Xml.Serialization.XmlSerializationWriterInterpreter.WriteRoot (System.Object ob) [0x00000] in <filename unknown>:0 

E/mono-rt ( 6638):   at System.Xml.Serialization.XmlSerializer.Serialize (System.Object o, System.Xml.Serialization.XmlSerializationWriter writer) [0x00000] in <filename unknown>:0 

E/mono-rt ( 6638):   at System.Xml.Serialization.XmlSerializer.Serialize (System.Xml.XmlWriter xmlWriter, System.Object o, System.Xml.Serialization.XmlSerializerNamespaces namespaces) [0x00000] in <filename unknown>:0 

E/mono-rt ( 6638):   --- End of inner exception stack trace ---

E/mono-rt ( 6638):   at System.Xml.Serialization.XmlSerializer.Se

【问题讨论】:

  • MobileTimeClock.secure.timedock.com.v2.ClockingAction 的类型是什么?
  • 我不敢相信我错过了。嗯,这是一个更好的起点谢谢! (对不起,我不必这么匆忙发布)。它是一个枚举类型。

标签: xml web-services exception xamarin asmx


【解决方案1】:

原来它是由具有整数值的可枚举引起的。这些值不会通过 Web 服务公开。

SO answer with link to explain how enumerables lose their value in web services

所以一个像这样的枚举:

Public Enum ClockAction
   IN = 10
   OUT = 20
End Enum 

将作为没有值的枚举公开,如下所示:

Public Enum ClockAction
   IN
   OUT
End Enum

我们将值作为整数存储在 SQLite 数据库中,并在为我们的 Web 服务序列化对象时尝试将它们转换回 ClockAction 枚举。这就是它失败的原因。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-09-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-05
    • 1970-01-01
    相关资源
    最近更新 更多