Тип объекта аргумента [тип] не является примитивным - PullRequest
0 голосов
/ 08 июня 2010

Я пытаюсь создать простой веб-сервис Гостевой книги с использованием ASP.NET WebServices.

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

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

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

Ответы [ 3 ]

2 голосов
/ 23 апреля 2013

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

Type[] extraTypes = {typeof(GuestBookService)};
XmlSerializer serializer = new XmlSerializer(typeof(DataContainerClass),extraTypes);
1 голос
/ 14 сентября 2012

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

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

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

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

1 голос
/ 08 июня 2010

GuestBookEntry помечен как сериализуемый?http://ondotnet.com/pub/a/dotnet/2002/08/26/serialization.html

...