Namespace para [DataContract]

230

Não consigo encontrar o espaço para nome para usar [DataContract]e [DataMember]elementos. De acordo com o que eu descobri, parece que adicionar o seguinte deve ser suficiente, mas no meu caso não é.

using System;
using System.Runtime.Serialization;

Aqui está um trecho do meu código:

using System;
using System.Runtime.Serialization;

namespace MyNamespace {

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

E o erro que eu recebo:

O nome do tipo ou namespace 'DataContract' não foi encontrado (está faltando uma diretiva de uso ou uma referência de montagem?)

Não estou usando os namespaces corretos?

Otiel
fonte
Usando o VS 2017, erro do compilador, não é possível criar, nenhuma mensagem na lista de erros ou qualquer indicação. Nenhuma coloração de sintaxe do DataContract, nada.
DudeNumber4
@ dudeNumber4 Clique com o botão direito do mouse em seu projeto Adicionar / Referência. Na caixa de diálogo, encontre System.Runtime.Serialization e faça com que a caixa de seleção cheque o estado. Então pressione "Ok"
Sim Mak

Respostas:

433

DataContractAttribute A classe está na System.Runtime.Serialization espaço para nome.

Você deve adicionar uma referência a System.Runtime.Serialization.dll. Essa montagem não é referenciada por padrão. Para adicionar a referência ao seu projeto, você deve ir para Referências -> Adicionar Referência no Solution Explorer e adicionar uma referência de montagem manualmente.

CD..
fonte
59
.... e que a montagem não é referenciado por padrão, então você tem que ir para References -> Add Referenceno Solution Explorer e adicionar uma referência de assembly ...
marc_s
11
É isso aí, eu não tinha a referência na minha solução! Eu pensei que se uma referência fosse necessária, isso me causaria um erro na linha using System.Runtime.Serialization;. Eu acho que eu estava errado :)
Otiel
2
Ugh. Por que na Terra não erra na usingdeclaração? Isso parece fazer sentido para mim.
Yatrix
7
Eu acho que é porque outro dll é usar esse namespace (caso contrário, você obteria um erro)
Gui
4
Obrigado! Nenhum dos documentos de exemplo da Microsoft menciona isso.
BobRodes
5

Os atributos [DataContract] e [DataMember] são encontrados no espaço para nome System.ServiceModel, que está no System.ServiceModel.dll.

System.ServiceModel usa os namespaces System e System.Runtime.Serialization para serializar os membros de dados.

Jatin Khurana
fonte
5

No visual studio for framework .NET 4.0,

  1. Tente adicionar nova referência ao projeto.
  2. Na guia .Net, Pesquisar System.Runtime.Serialization.
  3. Agora você pode usar using System.Runtime.Serialization. E o erro não será mostrado.
Md Kauser Ahmmed
fonte
0

Primeiro, adiciono as referências ao meu modelo e depois as uso no meu código. Existem duas referências que você deve adicionar:

using System.ServiceModel;
using System.Runtime.Serialization;

então, esse problema foi resolvido no meu programa. Espero que esta resposta possa ajudá-lo. Obrigado.

user3342169
fonte
0

Resolvi esse problema adicionando C: \ Arquivos de programas (x86) \ Assemblies de referência \ Microsoft \ Framework.NETFramework \ v4.0 \ System.Runtime.Serialization.dll na referência

RotatingWheel
fonte