Espacio de nombres para [DataContract]

230

No puedo encontrar el espacio de nombres para usar [DataContract]y [DataMember]elementos. Según lo que he encontrado, parece que agregar lo siguiente debería ser suficiente, pero en mi caso no lo es.

using System;
using System.Runtime.Serialization;

Aquí hay un fragmento de mi código:

using System;
using System.Runtime.Serialization;

namespace MyNamespace {

    [DataContract]
    public class Tuple<T1, T2> {
            // A custom implementation of a Tuple
            //...
            //...
        }
}

Y el error que obtengo:

No se pudo encontrar el tipo o el nombre del espacio de nombres 'DataContract' (¿le falta una directiva de uso o una referencia de ensamblado?)

¿No estoy usando los espacios de nombres correctos?

Otiel
fuente
Utilizando VS 2017, el error del compilador no se puede compilar, no hay ningún mensaje en la lista de errores ni ninguna indicación. Sin color de sintaxis de DataContract, nada.
dudeNumber4
@ dudeNumber4 Haga clic derecho en su proyecto Agregar / Referencia. En el cuadro de diálogo, busque System.Runtime.Serialization y marque la casilla de verificación. Luego presione "Ok"
Sim Mak

Respuestas:

433

DataContractAttributeLa clase está en el System.Runtime.Serializationespacio de nombres.

Debe agregar una referencia a System.Runtime.Serialization.dll. Sin embargo, ese ensamblaje no está referenciado por defecto. Para agregar la referencia a su proyecto, debe ir a Referencias -> Agregar referencia en el Explorador de soluciones y agregar una referencia de ensamblaje manualmente.

DISCOS COMPACTOS..
fuente
59
.... y ese ensamblado no está referenciado de manera predeterminada, por lo que debe ir al References -> Add ReferenceExplorador de soluciones y agregar una referencia de ensamblaje ...
marc_s
11
Eso es todo, ¡no tenía la referencia en mi solución! Pensé que si se necesitaba una referencia, me daría un error en la línea using System.Runtime.Serialization;. Supongo que estaba equivocado :)
Otiel
2
Ugh ¿Por qué en la Tierra no se equivoca en la usingdeclaración? Eso parece tener sentido para mí.
Yatrix
77
Supongo que es porque otro dll está usando ese espacio de nombres (de lo contrario, obtendría un error)
Gui
44
¡Gracias! Ninguno de los documentos de ejemplo de Microsoft menciona esto.
BobRodes
5

Los atributos [DataContract] y [DataMember] se encuentran en el espacio de nombres System.ServiceModel que se encuentra en System.ServiceModel.dll.

System.ServiceModel utiliza los espacios de nombres System y System.Runtime.Serialization para serializar los miembros de datos.

Jatin Khurana
fuente
5

En Visual Studio para .Net 4.0 framework,

  1. Intenta agregar una nueva referencia al proyecto.
  2. En la pestaña .Net, Buscar System.Runtime.Serialization.
  3. Ahora puedes usar using System.Runtime.Serialization. Y el error no se mostrará.
MD Kauser Ahmmed
fuente
0

Primero, agrego las referencias a mi Modelo, luego las uso en mi código. Hay dos referencias que debe agregar:

usando System.ServiceModel;
usando System.Runtime.Serialization;

entonces, este problema se resolvió en mi programa. Espero que esta respuesta te pueda ayudar. Gracias.

usuario3342169
fuente
0

Resolví este problema agregando C: \ Archivos de programa (x86) \ Assemblies de referencia \ Microsoft \ Framework.NETFramework \ v4.0 \ System.Runtime.Serialization.dll en la referencia

Rueda giratoria
fuente