Ошибка сериализации WCF с контрактом данных "ArrayOfstring" - PullRequest
0 голосов
/ 30 марта 2009

Когда я звоню в службу WCF, появляется ошибка, указанная ниже? Как мне от нее избавиться?

Произошла ошибка при попытке сериализации параметра http://tempuri.org/:MyWCFSvc.svc Сообщение InnerException было «Тип» System.String [] с именем контракта данных «ArrayOfstring: http://schemas.microsoft.com/2003/10/Serialization/Arrays' не ожидается Добавьте любые типы, которые не известны статически, в список известных типов - например, с помощью атрибута KnownTypeAttribute или добавив их в список известных типов, переданных DataContractSerializer. Пожалуйста, смотрите InnerException для более подробной информации. *

Я пытался использовать [ServiceKnownType (typeof (string []))] в своем интерфейсе службы WCF, но безуспешно

Ответы [ 4 ]

2 голосов
/ 17 февраля 2010

Год опоздал, но у меня возникла та же проблема, и вот что вам нужно сделать

List<SomeClass> mylist = new List<SomeClass>();

DataContractSerializer dcs = new DataContractSerializer(mylist.GetType());
XmlWriter writer = XmlWriter.Create(sb, XWS);
dcs.WriteObject(writer, query);      
writer.Close();

Проблема в том, что когда вы создаете ваш сериализатор с типом вашего класса, сериализатор не видит его как массив, он видит только один объект.

Если нашел это, сделав это первым:

DataContractSerializer dcs = new DataContractSerializer(SomeClass.GetType());
XmlWriter writer = XmlWriter.Create(sb, XWS);
dcs.WriteObject(writer, query[0]);  // Only get the first record from linq to sql
writer.Close();
1 голос
/ 04 декабря 2012

У меня тоже были такие же проблемы, но после квалификации OperationContract с [ServiceKnownType(typeof(string[]))] и [ServiceKnownType(typeof(int[]))] проблема была устранена.

Например:

[ServiceContract]
    public interface IReportService
    {
        [OperationContract]
        [ServiceKnownType(typeof(string[]))]
        [ServiceKnownType(typeof(int[]))]
        bool GenerateReport(int clientId, int masterId, string reportType, int[] vtIds, DateTime initialDate, DateTime finalDate,
                            bool descending, string userName, string timeZoneId, bool embedMap,
                            object[] vtExtraParameters, object[] vtScheduleParameters, string selectedCriteria,
                            out long reportID, out int scheduleID, out string message);
0 голосов
/ 31 марта 2009

Настройка сервисных ссылок на вашем клиенте предоставляет опции «Тип данных», которые позволяют вам указывать различные типы для Типов сбора / словаря. Какие настройки у вас там?

0 голосов
/ 30 марта 2009

У вас нет причин для того, чтобы иметь KnownType для массива строк. Сериализатор уже должен знать об этом, и массивы не являются проблемой. Я перемещаю Списки вещей в WCF без проблем. Не могли бы вы опубликовать репрезентативный образец того, что вы делаете?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...