2016-04-22 78 views
0

我想从monotouch(ios)上的web服务获取数据。我用SlSvcUtil创建一个代理类,我想从我的代理类访问方法,这样IXmlSerializable类型'System.Xml.Linq.XElement'必须具有默认构造函数

void OnGotResult(object sender, GetDataCompletedEventArgs e) 
{ 
    resultsLabel.Text = e.Result.ToString(); 
} 

当我尝试访问GetDataCompletedEventArgs方法从代理类geneerated类,它抛出与异常消息

System.Runtime.Serialization.InvalidDataContractException:IXmlSerializable类型'System.Xml.Linq.XElement'必须具有默认构造函数。

异常的堆栈跟踪:

在System.Runtime.Serialization.XmlDataContractInterpreter.GetConstructor()[0x00059]在/用户/助洗剂/数据/通道/七千三百二十二万九千九百一十九分之二千三百七十七/源极/ maccore/_build /库/ Frameworks/Xamarin.iOS.framework/Versions/git/src/mono/mcs/class/System.Runtime.Serialization/ReferenceSources/XmlDataContract_static.cs:49 at System.Runtime.Serialization.XmlDataContractInterpreter.CreateXmlSerializable()[0x00025] in /Users/builder/data/lanes/2377/73229919/source/maccore/_build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/src/mono/mcs/class/System.Runtime.Serialization/ReferenceSources/XmlDataContract_static .cs:34 at System.Runtime.Serialization.XmlDataContract.m__0() [0x00000]位于/Users/builder/data/lanes/2377/73229919/source/maccore/_build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/src/mono/external/referencesource/System.Runtime.Serialization /System/Runtime/Serialization/XmlDataContract.cs:14 在System.Runtime.Serialization.XmlObjectSerializerReadContext.ReadIXmlSerializable(System.Runtime.Serialization.XmlSerializableReader xmlSerializableReader,System.Runtime.Serialization.XmlReaderDelegator的XmlReader,System.Runtime.Serialization.XmlDataContract xmlDataContract ,布尔isMemberType)/Users/builder/data/lanes/2377/73229919/source/maccore/_build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/src/mono/external/referencesource/System中的[0x0008e] .Runtime.Serialization/System/Runtime/Serialization/XmlObjectSerializerReadContext.cs:555 at System.Runtime.Serialization.XmlObjectSerializerReadContext.ReadIXmlSerializable(System.Runtime.Serialization.XmlReaderDelegat或xmlReader,System.Runtime.Serialization.XmlDataContract xmlDataContract,Boolean isMemberType)/Users/builder/data/lanes/2377/73229919/source/maccore/_build/Library/Frameworks/Xamarin.iOS.framework/Versions/中的[0x00016] git/src/mono/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/XmlObjectSerializerReadContext.cs:525 at System.Runtime.Serialization.XmlDataContract.ReadXmlValue(System.Runtime.Serialization.XmlReaderDelegator xmlReader,System。 Runtime.Serialization.XmlObjectSerializerReadContext上下文)/Users/builder/data/lanes/2377/73229919/source/maccore/_build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/src/mono/external/中的[0x00014] referencesource/System.Runtime.Serialization/System/Runtime/Serialization/XmlDataContract.cs:455

帮我解决这个问题。

回答

0

第一步是确保您使用的是最新版本的Xamarin.iOS。 Xamarin.iOS 9.6.1.9很好。 Xamarin.iOS 9.4或9.2也可以。

接下来,您需要告诉managed linker保留默认的构造函数System.Xml.Linq.XElement,因为该构造函数很可能只能通过当前应用程序中的反射进行访问。保存该类型的一种方法是使用“Custom Linker Configuration”:

  1. 在iOS应用项目中创建一个新的文件Linker.xml。(如果你喜欢,你可以更改文件名。)

  2. 添加以下行:

    <linker> 
        <assembly fullname="System.Xml.Linq"> 
         <type fullname="System.Xml.Linq.XElement"> 
          <method name=".ctor" /> 
         </type> 
        </assembly> 
    </linker> 
    
  3. 对于每个配置(如“调试| iPhone”)已启用管理连接,添加以下下项目选项文本>的iOS构建>其他的mTouch参数

    --xml=Linker.xml 
    
+0

非常良好的沟通,乐于助人,快速支持。我能够通过您提供的答案找到正确的解决方案。谢谢,并致以良好的问候! – NagendraBabu

相关问题