2009-03-30 3 views
0

Получается ошибка, упомянутая ниже при вызове моей службы WCF? Как я могу избавиться от нее?Ошибка сериализации WCF с контрактом данных «ArrayOfstring»

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

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

+1

Можете ли вы предоставить образец кода, который вызывает эту проблему? –

ответ

2

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

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

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

Проблема заключается в том, когда вы строите свой сериалайзер с TYPEOF своего класса, то serialzer не видит его как а именно, он видит только один объект.

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

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

@KenL: спасибо за ответ, но поскольку OP никогда не размещал код, который он использовал, откуда вы знаете, что ваше решение решило бы его проблему? Все, что вы знаете, это то, что вы получили аналогичное исключение. Это могло быть вызвано чем-то совсем другим. –

0

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

0

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

1

У меня тоже были одни и те же вопросы, но после того, как qualifiying в 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

Моя проблема заключалась в том, что одна из возвращаемых структур DataContract включала DataMember типа объекта, который обычно присваивался внутреннему типу данных (который работает), но иногда ему присваивается строка [] (которая не работает). Добавление только [ServiceKnownType (typeof (string []))], как описано выше, разрешило эту проблему. – Andy

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