Espace de noms pour [DataContract]

230

Je ne trouve pas l'espace de noms à utiliser pour les éléments [DataContract]et [DataMember]. D'après ce que j'ai trouvé, il semble que l'ajout de ce qui suit devrait être suffisant, mais dans mon cas, ce n'est pas le cas.

using System;
using System.Runtime.Serialization;

Voici un extrait de mon code:

using System;
using System.Runtime.Serialization;

namespace MyNamespace {

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

Et l'erreur que j'obtiens:

Le type ou le nom de l'espace de noms 'DataContract' est introuvable (manque-t-il une directive using ou une référence d'assembly?)

Suis-je pas en utilisant les bons espaces de noms?

Otiel
la source
En utilisant VS 2017, une erreur de compilation, ne peut pas être générée, aucun message dans la liste d'erreurs ou aucune indication du tout. Pas de coloration syntaxique de DataContract, rien.
dudeNumber4
@ dudeNumber4 Faites un clic droit sur votre projet Ajouter / Référence. Dans la boîte de dialogue, recherchez System.Runtime.Serialization et vérifiez l'état de la case à cocher. Ensuite, appuyez sur "Ok"
Sim Mak

Réponses:

433

DataContractAttributeLa classe est dans l' System.Runtime.Serializationespace de noms.

Vous devez ajouter une référence à System.Runtime.Serialization.dll. Cet assemblage n'est cependant pas référencé par défaut. Pour ajouter la référence à votre projet, vous devez aller dans Références -> Ajouter une référence dans l'Explorateur de solutions et ajouter une référence d'assemblage manuellement.

CD..
la source
59
.... et cet assembly n'est pas référencé par défaut, vous devez donc aller References -> Add Referencedans l'Explorateur de solutions et ajouter une référence d'assembly ...
marc_s
11
Ca y est, je n'avais pas la référence dans ma solution! Je pensais que si une référence était nécessaire, cela me ferait une erreur sur la ligne using System.Runtime.Serialization;. Je suppose que j'avais tort :)
Otiel
2
Pouah. Pourquoi diable ne fait-il pas d'erreur sur la usingdéclaration? Cela me semble logique.
Yatrix
7
Je suppose que c'est parce qu'une autre DLL utilise cet espace de noms (sinon vous obtiendriez une erreur)
Gui
4
Je vous remercie! Aucun exemple de doc de Microsoft ne le mentionne.
BobRodes
5

Les attributs [DataContract] et [DataMember] se trouvent dans l'espace de noms System.ServiceModel qui se trouve dans System.ServiceModel.dll.

System.ServiceModel utilise les espaces de noms System et System.Runtime.Serialization pour sérialiser les membres de données.

Jatin Khurana
la source
5

Dans Visual Studio pour le framework .Net 4.0,

  1. Essayez d'ajouter une nouvelle référence au projet.
  2. Sur l'onglet .Net, Rechercher System.Runtime.Serialization .
  3. Maintenant, vous pouvez utiliser using System.Runtime.Serialization. Et l'erreur ne sera pas affichée.
Md Kauser Ahmmed
la source
0

Tout d'abord, j'ajoute les références à mon modèle, puis je les utilise dans mon code. Vous devez ajouter deux références:

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

ensuite, ce problème a été résolu dans mon programme. J'espère que cette réponse pourra vous aider. Merci.

user3342169
la source
0

J'ai résolu ce problème en ajoutant C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ System.Runtime.Serialization.dll dans la référence

RotatingWheel
la source