【问题标题】:Service Reference object not Serializing服务引用对象未序列化
【发布时间】:2012-05-11 14:42:39
【问题描述】:

在 WCF 服务参考中定义的相当复杂的对象RequestList 也是同一服务参考中方法的输入参数。客户端已经生成了一个 XML,所以我们需要做的就是 XmlSerialize 对象,然后反序列化客户端 xml。尝试使用给定类型创建新的 XmlSerializer 时引发异常。

XmlSerializer serializer = new XmlSerializer(typeof(RequestList));

抛出 InvalidOperationException:

Unable to generate a temporary class (result=1).
error CS0030: Cannot convert  type 'ServiceReference.Parameter[]' 
  to 'ServiceReference.Parameter'
error CS0029: Cannot implicitly convert type 'ServiceReference.Parameter' 
  to'ServiceReference.Paramter[]'

数组不应该很容易序列化吗?为什么会抛出此错误,我该如何解决?

【问题讨论】:

  • 可以粘贴RequestList的定义,尤其是Parameter[]字段/属性。
  • 您是否检查过您的对象是否包含任何循环引用,因为这可能是它失败的原因之一。也尝试代码 XmlSerializer ser = new XmlSerializer(); ser.Serialize(obj,stream);如果你想要 xml 字符串从流中读取它

标签: c# wcf xml-serialization


【解决方案1】:

我认为这里的问题与错误或其他问题没有直接关系。您可能正在使用一个对象,或者该对象具有无法使用 xml 序列化进行序列化的属性。 比如Dictionary<T>不能直接序列化;它给出了错误;要在xml序列化中使用Dictionary<T>,需要通过继承字典实现IXmlSerializable接口。

情况可能并非如此,因为另一方面我不知道您要序列化什么。

【讨论】:

  • 没有字典。只是一个非常大的整数、布尔值、双精度、十进制和日期时间类型的结构。 DateTime 类型是可序列化的,对吧?
【解决方案2】:

我发现了问题所在。显然有某种错误。在RequestList 类的定义中,有一个带有双数组Parameter[][] 的参数。显然这会导致问题。解决方法是使其成为单个数组:Parameter[]。一旦我这样做了,它就完美地工作了。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 2014-04-08
    • 1970-01-01
    • 1970-01-01
    • 2015-08-30
    • 2010-10-06
    • 1970-01-01
    相关资源
    最近更新 更多