参数对象[type]的类型不是原始的

时间:2010-06-08 01:56:24

标签: c# asp.net web-services asmx

我正在尝试使用ASP.NET WebServices创建一个简单的留言簿Web服务。

尝试序列化对象列表时,出现以下异常:

System.InvalidOperationException: The type of the argument object 'GuestBookService.GuestBookEntry' is not primitive.

如何解决此错误?

3 个答案:

答案 0 :(得分:2)

如果GuestBookService是一个子类,并且持有它的属性属于其超类'类型,那么你必须为Serializer提供如下额外类型:

Type[] extraTypes = {typeof(GuestBookService)};
XmlSerializer serializer = new XmlSerializer(typeof(DataContainerClass),extraTypes);

答案 1 :(得分:1)

是GuestBookEntry标记为可序列化? http://ondotnet.com/pub/a/dotnet/2002/08/26/serialization.html

答案 2 :(得分:1)

我有同样的错误,但在我的情况下,解决方案是不同的。 我的错误是我创建了一个返回基类类型的Web方法,并尝试返回派生类。

public BaseClass MyMethod() { /*...*/ }

我尝试返回BaseClassDerivativeA,BaseClassDerivativeB等。派生类将它们自己的字段添加到基类的字段中。 我注意到这种意义上的多态性似乎是not supported

我已将我的派生类推广到单个类,因此在返回类型中删除了这种多态性。这解决了我的错误。