IXmlSerializable类型'System.Xml.Linq.XElement'必须具有默认构造函数

时间:2016-04-22 08:31:22

标签: c# xamarin.ios

我试图通过monotouch(ios)从我的网络服务获取数据。我使用SlSvcUtil创建一个代理类,我试图从我的代理类中访问一个方法,如下所示

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

当我尝试在代理类中生成的类中访问GetDataCompletedEventArgs方法时,它会抛出一条带有消息的异常

  

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

     

异常的堆栈跟踪:

     

at /Users/builder/data/lanes/2377/73229919/source/maccore/_build/Library/Frameworks/Xamarin.iOS.framework/Versions/中的System.Runtime.Serialization.XmlDataContractInterpreter.GetConstructor()[0x00059] GIT中/ SRC /单声道/ MCS /类/ System.Runtime.Serialization / ReferenceSources / XmlDataContract_static.cs:49     在/Users/builder/data/lanes/2377/73229919/source/maccore/_build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/src中的System.Runtime.Serialization.XmlDataContractInterpreter.CreateXmlSerializable()[0x00025]中/mono/mcs/class/System.Runtime.Serialization/ReferenceSources/XmlDataContract_static.cs:34     在/Users/builder/data/lanes/2377/73229919/source/maccore/_build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/src中的System.Runtime.Serialization.XmlDataContract.m__0()[0x00000] /mono/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/XmlDataContract.cs:14     在/ Users / builder /中的System.Runtime.Serialization.XmlObjectSerializerReadContext.ReadIXmlSerializable(System.Runtime.Serialization.XmlSerializableReader xmlSerializableReader,System.Runtime.Serialization.XmlReaderDelegator xmlReader,System.Runtime.Serialization.XmlDataContract xmlDataContract,Boolean isMemberType)[0x0008e]数据/通道/七千三百二十二万九千九百一十九分之二千三百七十七/源极/ maccore / _build /库/框架/ Xamarin.iOS.framework /版本/ GIT中/ SRC /单声道/外部/ referencesource / System.Runtime.Serialization /系统/运行时间/序列化/ XmlObjectSerializerReadContext。 CS:555     在/ Users / builder / data / lanes / 2377/73229919 / source中的System.Runtime.Serialization.XmlObjectSerializerReadContext.ReadIXmlSerializable(System.Runtime.Serialization.XmlReaderDelegator xmlReader,System.Runtime.Serialization.XmlDataContract xmlDataContract,Boolean isMemberType)[0x00016] /maccore/_build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/src/mono/external/referencesource/System.Runtime.Serialization/System/Runtime/Serialization/XmlObjectSerializerReadContext.cs:525     在/ Users / builder / data / lanes / 2377/73229919 / source / maccore /中的System.Runtime.Serialization.XmlDataContract.ReadXmlValue(System.Runtime.Serialization.XmlReaderDelegator xmlReader,System.Runtime.Serialization.XmlObjectSerializerReadContext context)[0x00014] _build / Library / Frameworks / Xamarin.iOS.framework / Versions / git / src / mono / external / referencesource / System.Runtime.Serialization / System / Runtime / Serialization / XmlDataContract.cs:455

帮我解决这个问题。

1 个答案:

答案 0 :(得分:0)

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

接下来,您需要告诉managed linker保留默认的sp_rename 'A.product_dollar_amt', '_product_dollar_amount', 'COLUMN'; sp_rename 'A.product_local_amt', '_product_local_amt', 'COLUMN'; sp_rename 'A.product_trans_amt', '_product_trans_amt', 'COLUMN'; 构造函数,因为该构造函数很可能只能通过当前应用中的反射进行访问。保留该类型的一种方法是使用" Custom Linker Configuration":

  1. 在iOS应用项目中创建一个新的alter table A add product_dollar_amt as (round(product_dollar_amt, 2)); alter table A add product_local_amt = round(product_local_amt, 2); alter table A add product_trans_amt = round(product_trans_amt, 2); 文件。 (如果您愿意,可以更改文件名。)

  2. 添加以下行:

    System.Xml.Linq.XElement
  3. 对于启用了托管链接器的每个配置(如" Debug | iPhone"),在项目选项>下添加以下文本。 iOS Build>其他mtouch参数

    Linker.xml