如何用Webservice返回封装了自定义类型的ArrayList对象,费解中……

时间:2021-11-20 19:31:59
大家好,我最近用webservice,想调用webservice的方法,返回一个自定义类型MessageItem类型的ArrayList。用浏览器调用此服务发现有值,但是全部变成ArrayOfAnyType了,而不是ArrayList。
客户端添加服务引用以后,调用服务的这个方法,会报错,内容如下:

    格式化程序尝试对消息反序列化时引发异常: 尝试对参数 http://tempuri.org/ 进行反序列化时出错: retreiveMessageResponse。InnerException 消息是“第 1 行 327 位置处出现错误。 元素“http://tempuri.org/:anyType”含有“http://tempuri.org/:MessageItem”数据协定的数据。反序列化程序不知道映射到此协定的类型。请将与“MessageItem”对应的类型添加到已知类型的列表中,例如,通过使用 KnownTypeAttribute 属性或通过将其添加到传递给 DataContractSerializer 的已知类型的列表等方法。”。有关详细信息,请参阅 InnerException。

在网上查了好多,也没一个可以解决问题的,提示又不是很看得懂,希望高手指点,最好能讲的浅显易懂一点的解决方案哈,万分感谢!

5 个解决方案

#1


方法1:把你的自定义类型MessageItem变成byte[]
方法2:在调用websevice的机器上的那个代理类里添加上你的自定义类型MessageItem试试,

#2


应该确保你的对象都能正常的序列化.
像ArrayList这种结构最好少用,本身效率就不高,因其能存放不同类型的数据,感觉用在WebService中不太合适.应该用List<>

#3


引用 1 楼 htia 的回复:
方法1:把你的自定义类型MessageItem变成byte[]
方法2:在调用websevice的机器上的那个代理类里添加上你的自定义类型MessageItem试试,


请问下方法2是怎么实现的啊?是要添加什么配置文件么?

#4


打开代理类,那个代理类的cs文件

#5


关注

#1


方法1:把你的自定义类型MessageItem变成byte[]
方法2:在调用websevice的机器上的那个代理类里添加上你的自定义类型MessageItem试试,

#2


应该确保你的对象都能正常的序列化.
像ArrayList这种结构最好少用,本身效率就不高,因其能存放不同类型的数据,感觉用在WebService中不太合适.应该用List<>

#3


引用 1 楼 htia 的回复:
方法1:把你的自定义类型MessageItem变成byte[]
方法2:在调用websevice的机器上的那个代理类里添加上你的自定义类型MessageItem试试,


请问下方法2是怎么实现的啊?是要添加什么配置文件么?

#4


打开代理类,那个代理类的cs文件

#5


关注