IXmlSerializable Type 'System.Xml.Linq.XElement' 必须具有默认构造函数
本文关键字:默认 构造函数 Linq Type System Xml IXmlSerializable XElement | 更新日期: 2024-11-03 21:13:01
我正在尝试从Monotouch(ios)上的Web服务中获取数据。我使用 SlSvcUtil 创建了一个代理类,我正在尝试从我的代理类访问一个方法,如下所示
void OnGotResult(object sender, GetDataCompletedEventArgs e)
{
resultsLabel.Text = e.Result.ToString();
}
当我尝试访问从代理类生成的类中GetDataCompletedEventArgs
方法时,它会抛出带有消息的异常
System.Runtime.Serialization.InvalidDataContractException:IXmlSerializable Type 'System.Xml.Linq.XElement' 必须具有默认构造函数。
异常堆栈跟踪:
at System.Runtime.Serialization.XmlDataContractInterpreter.GetConstructor () [0x00059] 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: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] in/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 at System.Runtime.Serialization.XmlObjectSerializerReadContext.ReadIXmlSerializable (System.Runtime.Serialization.XmlSerializableReader xmlSerializableReader, System.Runtime.Serialization.XmlReaderDelegator xmlReader, System.Runtime.Serialization.XmlDataContract xmlDataContract, Boolean isMemberType) [0x0008e] in/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/XmlObjectSerializerReadContext.cs:555 at System.Runtime.Serialization.XmlObjectSerializerReadContext.ReadIXmlSerializable (System.Runtime.Serialization.XmlReaderDelegator xmlReader, System.Runtime.Serialization.XmlDataContract xmlDataContract, Boolean isMemberType) [0x00016] in/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/XmlObjectSerializerReadContext.cs:525 at System.Runtime.Serialization.XmlDataContract.ReadXmlValue (System.Runtime.Serialization.XmlReaderDelegator xmlReader, System.Runtime.Serialization.XmlObjectSerializerReadContext context) [0x00014] in/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:455
帮我解决这个问题。
第一步是确保你使用的是最新版本的 Xamarin.iOS。Xamarin.iOS 9.6.1.9 很好。Xamarin.iOS 9.4或9.2也应该可以工作。
接下来,需要告诉托管链接器保留默认的构造函数System.Xml.Linq.XElement
因为该构造函数很可能只能通过当前应用中的反射进行访问。保留该类型的一种方法是使用"自定义链接器配置":
-
在 iOS 应用项目中创建新的
Linker.xml
文件。(如果需要,可以更改文件名。 -
添加以下行:
<linker> <assembly fullname="System.Xml.Linq"> <type fullname="System.Xml.Linq.XElement"> <method name=".ctor" /> </type> </assembly> </linker>
-
对于启用了托管链接器的每个配置(如"调试|iPhone"),请在"iOS 生成>其他 mtouch 参数>"项目选项"下添加以下文本:
--xml=Linker.xml