2012-05-11 37 views
0

在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[]' 

不宜阵列轻易序列化?为什么这个错误被抛出,我该如何解决?

+3

可以使用RequestList的粘贴定义,尤其是Parameter []字段/属性。 –

+0

您是否检查过您的对象以包含任何循环引用,因为这可能是它失败的原因之一。也请尝试代码XmlSerializer ser = new XmlSerializer(); ser.Serialize(OBJ,流);如果你想从流 – Rajesh

回答

0

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

0

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

这可能不是这种情况,因为我不知道你想要反序列化什么。

+0

没有字典中读取它的XML字符串。只是一个非常大的int,bools,double,decimal和DateTime类型的结构。 DateTime类型是可序列化的,对吗? – SaulBack