C# Mono wsdl实用程序无法处理易趣';为他们的SOAP API创建WSDL文件
我在尝试处理eBay的wsdl文件时,从Mono的wsdl实用程序中发现此错误- ()C# Mono wsdl实用程序无法处理易趣';为他们的SOAP API创建WSDL文件,c#,web-services,mono,wsdl,ebay-api,C#,Web Services,Mono,Wsdl,Ebay Api,我在尝试处理eBay的wsdl文件时,从Mono的wsdl实用程序中发现此错误- () 在谷歌搜索解决方案时,有人建议更改以开头的元素。我不知道这是否解决了您的问题,但您的问题中缺少两个'#': 发件人: 将xmlanyementAttribute应用于返回xmlement或XmlNode对象数组的字段。根据对象是被序列化还是反序列化,此类字段可以以两种方式使用。序列化时,对象生成为XML元素或节点,即使它们在被序列化的对象中没有相应的成员。如果在应用属性时指定Name属性值,则插入到数组中的所
在谷歌搜索解决方案时,有人建议更改以
开头的元素。我不知道这是否解决了您的问题,但您的问题中缺少两个'#'
:
发件人:
将xmlanyementAttribute
应用于返回xmlement
或XmlNode
对象数组的字段。根据对象是被序列化还是反序列化,此类字段可以以两种方式使用。序列化时,对象生成为XML元素或节点,即使它们在被序列化的对象中没有相应的成员。如果在应用属性时指定Name
属性值,则插入到数组中的所有xmlement
或XmlNode
对象必须具有相同的元素名称和默认命名空间,否则会引发异常如果设置名称空间
属性值,则必须同时设置名称
属性,并且XmlElement
或XmlNode
对象也必须具有相同的名称和名称空间值。如果未指定Name
值,则xmlement
或XmlNode
对象可以具有任何元素名称
因此,我猜解决方案是简单地删除名称空间
属性值:
[System.Xml.Serialization.XmlAnyElement]
我不知道这是否解决了您的问题,但您的问题中缺少两个“#”
:
发件人:
将xmlanyementAttribute
应用于返回xmlement
或XmlNode
对象数组的字段。根据对象是被序列化还是反序列化,此类字段可以以两种方式使用。序列化时,对象生成为XML元素或节点,即使它们在被序列化的对象中没有相应的成员。如果在应用属性时指定Name
属性值,则插入到数组中的所有xmlement
或XmlNode
对象必须具有相同的元素名称和默认命名空间,否则会引发异常如果设置名称空间
属性值,则必须同时设置名称
属性,并且XmlElement
或XmlNode
对象也必须具有相同的名称和名称空间值。如果未指定Name
值,则xmlement
或XmlNode
对象可以具有任何元素名称
因此,我猜解决方案是简单地删除名称空间
属性值:
[System.Xml.Serialization.XmlAnyElement]
很好的发现——这是我犯的一个错误,我确实尝试了“###other”——这让wsdl工具很高兴,但在运行简单的C程序实例化webservice助手时,我仍然遇到了运行时异常class@dtb:感谢您关于删除命名空间属性值的建议,这似乎确实修复了我得到的运行时异常,但现在我得到了一个新的运行时异常:“未处理的异常:System.InvalidOperationException:Member RequesterCredentialsField未在类eBayAPIInterfaceService中找到。”-这很奇怪,因为RequesterCredentialsField是eBayAPIInterfaceService中的第一个成员。我不明白它为什么找不到它。RequesterCredentialsField
字段是私有的。XmlSerialization仅适用于公共属性/字段,也就是说,它应该使用publicRequesterCredentials
属性而不是private字段。谢谢,从生成的XmlAnyElement属性中删除名称空间并使用public RequesterCredentials字段非常有效。很好的发现-我犯了一个错误,实际上,我确实尝试了“##other”-这让wsdl工具很高兴,但在运行简单的C程序实例化webservice helper时,我仍然遇到了运行时异常class@dtb:感谢您关于删除命名空间属性值的建议,这似乎确实修复了我遇到的运行时异常,但现在我得到了一个新的运行时异常:“未处理的异常:System.InvalidOperationException:在类eBayAPIInterfaceService中找不到成员RequesterCredentialsField。”-这很奇怪,因为RequesterCredentialsField是eBayAPIInterfaceService中的第一个成员。我不明白它为什么找不到它。RequesterCredentialsField
字段是私有的。XmlSerialization仅适用于公共属性/字段,即它应该使用公共RequesterCredentials
属性而不是私有字段。谢谢,从生成的XmlAnyElement属性中删除名称空间并使用公共RequesterCredentialsField工作得很好。ErrorParameterType.Any
的生成代码是什么样子的?@dtb:我已经在问题文本中添加了ErrorParameterType的定义,我在源代码中找不到ErrorParameterType.Any
。我添加了一个指向正在生成的完整.cs文件的链接。该链接将Makefile和my test.cs放在同一目录中。Namespace=”“
似乎是罪魁祸首;我在MSDN上找到了一条引文(见我的答案)。为ErrorParameterType.Any
生成的代码是什么样子的?@dtb:我在问题文本中添加了ErrorParameterType的定义,但在源代码中找不到ErrorParameterType.Any
。我添加了一个指向正在生成的完整.cs文件的链接。该链接将Makefile和my test.cs放在同一目录中。Namespace=”“
似乎是罪魁祸首;我在MSDN上找到了一条引文(见我的答案)。
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.1433")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="urn:ebay:apis:eBLBaseComponents")]
public partial class ErrorParameterType {
private System.Xml.XmlElement[] anyField165;
... more class members follow ...
/// <remarks/>
[System.Xml.Serialization.XmlAnyElement(Namespace="")]
public System.Xml.XmlElement[] Any {
get {
return this.anyField165;
}
set {
this.anyField165 = value;
}
}
}
<xs:any namespace="##other" ...
↑
[System.Xml.Serialization.XmlAnyElement(Namespace="")]
public System.Xml.XmlElement[] Any {
get {
return this.anyFieldXXX;
}
set {
this.anyFieldXXX = value;
}
}
[System.Xml.Serialization.XmlAnyElement]