2016-04-22 77 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

相關問題