Почему я получаю это сообщение об ошибке WCF?
Я получаю сообщение об ошибке ниже, когда я звоню в службу 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 ответа
Из того, что я понял, у вас есть функция WCF, у которой есть параметр с именем "myEntity". Я предполагаю, что тип myEntity является определяемым пользователем классом и украшен атрибутом DataContract, как и должно быть. Я также предполагаю, что тип myEntity имеет поле члена, которое является строковым массивом. Давайте предположим, что все это правда (опять же, было бы очень полезно, если бы вы могли опубликовать свой код).
Обычно строковые массивы, то есть string[], сериализуются очень хорошо. Но в некоторых случаях (см. Здесь и здесь) вам, возможно, придется добавить его в список известных типов, чтобы WCF правильно все сериализовало.
Для этого добавьте следующее:
[DataContract]
[KnownType(typeof(string[]))]
public class YourClassNameHere
{
}
Вы не опубликовали код, поэтому мой ответ основан на предположении, что у вас есть класс myEntity, который вы пытаетесь сериализовать. Попробуйте использовать KnownTypeAttribute для класса
например
[KnownType(typeof(myEntity))]
Вы можете обратиться к следующей ссылке MSDN: KnownTypeAttribute
В моем случае после добавления атрибута [Serializable] в класс MyEntity. И тогда проблема пришла с сериализацией массива строк ролей.
[Serializable]
[KnownType(typeof(string[]))]
public class MyEntity
{
.........
public string roles[]
.........
}
[KnownType (typeof (string []))] работал как по волшебству!
Да. Как объяснялось в предыдущем посте, проблема возникает, если вы передаете массив типа (который определяется как DataContract]). вам нужно будет определить массив этого класса как отдельный тип и пометить его как контракт данных.
Не будет работать`
[DataContract]
Public class ABC{
}
...
SendData(ABC[])
`
Что будет работать:
Public class Data{ public ABC[] prop{get;set;}}
...
SendData(Data);