2010-06-08 5 views
0

Я пытаюсь создать простой веб-сервис Guestbook с помощью ASP.NET WebServices.Тип аргумента object [type] не является примитивным

При попытке сериализации список объектов, я получаю следующее исключение:

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

Как я могу исправить эту ошибку?

+3

Не могли бы вы опубликовать некоторые из кода вокруг линии что вызывает эту ошибку? Трудно диагностировать изолированно. –

ответ

1

У меня была такая же точная ошибка, но в моем случае решение было иным. Моя ошибка заключалась в том, что я создал веб-метод, который возвращал тип базового класса, и попытался вернуть производные классы.

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

Я бы попытаться вернуть BaseClassDerivativeA, BaseClassDerivativeB и т.д. Производные классы добавлены поля собственных полей для базового класса. Я заметил полиморфизм в этом смысле, кажется, not supported.

Я обобщил свои производные классы на один класс и, таким образом, удалил этот тип полиморфизма в возвращаемом типе. Это исправило мою ошибку.

2

Если GuestBookService подкласс и атрибут держит это своего рода суперкласса, то вы должны дать сериализатором дополнительные типы, как это:

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

По какой-то причине даже с 'XMLInclude' и' KnownType' в родительском классе мне все еще приходилось делать это, чтобы очистить ошибку при попытке связаться с сервисом WCF из приложения Android. –

Смежные вопросы