Почему я получаю это сообщение об ошибке WCF? - PullRequest
8 голосов
/ 29 апреля 2009

Я получаю сообщение об ошибке ниже, когда звоню в службу WCF. Что мне здесь не хватает?

'System.String[]' with data contract name
'ArrayOfstring:http://schemas.microsoft.com/2003/10/Serialization/Arrays'
is not expected. Add any types not known statically to the list of known
types - for example, by using the KnownTypeAttribute attribute or by adding
them to the list of known types passed to DataContractSerializer.'.  Please
see InnerException for more details.

{"There was an error while trying to serialize parameter
http://tempuri.org/:myEntity. The InnerException message was
'Type 'System.String[]' with data contract name
'ArrayOfstring:http://schemas.microsoft.com/2003/10/Serialization/Arrays'
is not expected. Add any types not known statically to the list of known
types - for example, by using the KnownTypeAttribute attribute or by adding
them to the list of known types passed to DataContractSerializer.'.  

Please see InnerException for more details."}

Ответы [ 4 ]

12 голосов
/ 29 апреля 2009

Из того, что я понял, у вас есть функция WCF, у которой есть параметр с именем 'myEntity'. Я предполагаю, что тип myEntity является пользовательским классом и украшен атрибутом DataContract, как и должно быть. Я также предполагаю, что тип myEntity имеет поле члена, которое является строковым массивом. Давайте предположим, что все это правда (опять же, было бы очень полезно, если бы вы могли опубликовать свой код).

Обычно строковые массивы, т. Е. Строка [], очень хорошо сериализуются. Но в некоторых случаях (см. здесь и здесь ) вам, возможно, придется добавить его в список известных типов, чтобы WCF правильно все сериализовал.

Для этого добавьте следующее:

[DataContract]
[KnownType(typeof(string[]))]
public class YourClassNameHere
{
}
5 голосов
/ 29 апреля 2009

Вы не опубликовали код, поэтому мой ответ основан на предположении, что у вас есть класс myEntity, который вы пытаетесь сериализовать. Попробуйте использовать KnownTypeAttribute для класса

например.

[KnownType(typeof(myEntity))]

Вы можете обратиться к следующей ссылке MSDN: KnownTypeAttribute

0 голосов
/ 04 августа 2015

В моем случае после добавления атрибута [Serializable] в класс MyEntity. И затем возникла проблема с сериализацией массива строк ролей.

    [Serializable]
    [KnownType(typeof(string[]))]
    public class MyEntity
    {
       .........
       public string roles[]
       ......... 
    }

[KnownType (typeof (string []))] работал как по волшебству!

0 голосов
/ 13 марта 2012

Да. Как объяснялось в предыдущем посте, проблема возникает, если вы передаете массив типа (который определяется как DataContract]). вам нужно будет определить массив этого класса как отдельный тип и пометить его как контракт данных.

Wont Work`

[DataContract]
Public class ABC{
}

...

SendData(ABC[])

`

Что будет работать:

Public class Data{ public ABC[] prop{get;set;}}
...
SendData(Data);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...