2009-04-29 24 views
8

Recibo el siguiente error cuando llamo a mi servicio WCF. ¿Que me estoy perdiendo aqui?¿Por qué recibo este mensaje de error de 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."} 
+1

¿Puedes publicar el código en tu servicio y/o cliente? –

+0

soy nuevo en WCF ... myEntity es un proyecto de negocio de C# ... ¿pueden decirme cómo y dónde puedo suministrar este tipo a DataContractSerializer? –

Respuesta

12

Por lo que sé, tiene una función de WCF que tiene un parámetro denominado 'myEntity'. Supongo que el tipo de myEntity es una clase definida por el usuario y está adornada con el atributo DataContract, como debería ser. También estoy asumiendo que el tipo de myEntity tiene un campo miembro que es una matriz de cadenas. Supongamos que todo esto es cierto (de nuevo, sería realmente útil si pudieras publicar tu código).

Normalmente, las matrices de cadenas, es decir, la cadena [], se serializarán correctamente. Pero, en algunos casos (consulte here y here), es posible que deba agregarlo a la lista de tipos conocidos para que WCF serialice todo correctamente.

Para ello, agregue el siguiente:

[DataContract] 
[KnownType(typeof(string[]))] 
public class YourClassNameHere 
{ 
} 
+0

golpe en el objetivo Matt ... funciona como un encanto! :-) gracias por tu respuesta! –

+0

Me alegro de que funcionó para usted. –

+0

¿Qué tal si recibo este error y no tengo una clase personalizada? Solo quiero pasar un parámetro que resulta ser una cadena []. –

5

No ha publicado el código, por lo que mi respuesta se basa en la suposición de que usted tiene un myEntity clase que usted está tratando de serializar. Intente utilizar un KnownTypeAttribute para la clase

p.

[KnownType(typeof(myEntity))] 

Puede consultar el siguiente enlace de MSDN: KnownTypeAttribute

+0

gracias por su respuesta ... pero no funcionó para mí –

+0

Steve, ¿podría publicar una muestra de su código? –

0

Sí. Como se explicó en la publicación anterior, El problema ocurre si pasa una matriz de un Tipo (que se define como un DataContract]). Deberá definir la matriz de esta clase como un tipo separado y marcarla como un contrato de datos.

Wont Work`

[DataContract] 
Public class ABC{ 
} 

... 

SendData(ABC[]) 

`

Lo que funciona:

Public class Data{ public ABC[] prop{get;set;}} 
... 
SendData(Data); 
0

En mi caso, después de añadir el atributo [Serializable] a la clase myEntity. Y luego vino el problema con la serialización de la matriz de cadenas de roles.

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

[KnownType (typeof (string [])]] funcionó como la magia!

Cuestiones relacionadas