Przestrzeń nazw dla [DataContract]

230

Nie mogę znaleźć przestrzeni nazw [DataContract]i [DataMember]elementów. Zgodnie z tym, co znalazłem, wydaje się, że dodanie poniższych powinno wystarczyć, ale w moim przypadku tak nie jest.

using System;
using System.Runtime.Serialization;

Oto fragment mojego kodu:

using System;
using System.Runtime.Serialization;

namespace MyNamespace {

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

I pojawia się błąd:

Nie można znaleźć nazwy typu lub przestrzeni nazw „DataContract” (brakuje dyrektywy używającej lub odwołania do zestawu?)

Czy nie używam odpowiednich przestrzeni nazw?

Otiel
źródło
Korzystanie z VS 2017, błąd kompilatora, nie można zbudować, brak komunikatu na liście błędów lub jakiekolwiek wskazanie. Brak kolorowania składni DataContract, nic.
dudeNumber4
@ dudeNumber4 Kliknij prawym przyciskiem myszy swój projekt Dodaj / odniesienie. W oknie dialogowym znajdź System.Runtime.Serialization i zaznacz pole wyboru sprawdzone. Następnie naciśnij „Ok”
Sim Mak

Odpowiedzi:

433

DataContractAttributeKlasa znajduje się w System.Runtime.Serializationprzestrzeni nazw.

Powinieneś dodać odniesienie do System.Runtime.Serialization.dll. Do tego zestawu nie ma jednak domyślnego odniesienia. Aby dodać odniesienie do projektu, musisz przejść do Odnośniki -> Dodaj odniesienie w Eksploratorze rozwiązań i ręcznie dodać odwołanie do zespołu.

PŁYTA CD..
źródło
59
.... a ten zestaw nie jest domyślnie References -> Add Reference
przywoływany
11
To wszystko, nie miałem referencji w moim rozwiązaniu! Pomyślałem, że gdyby potrzebne było odniesienie, dostałbym błąd na linii using System.Runtime.Serialization;. Chyba się myliłem :)
Otiel,
2
Ugh. Dlaczego, u licha, nie zawiera błędu w usingoświadczeniu? To wydaje mi się mieć sens.
Yatrix
7
Chyba dlatego, że inna biblioteka DLL używa tej przestrzeni nazw (w przeciwnym razie wystąpiłby błąd)
Gui
4
Dziękuję Ci! Żaden przykładowy dokument Microsoft nie wspomina o tym.
BobRodes
5

Atrybuty [DataContract] i [DataMember] znajdują się w przestrzeni nazw System.ServiceModel, która znajduje się w System.ServiceModel.dll.

System.ServiceModel używa przestrzeni nazw System i System.Runtime.Serialization do serializacji członków danych.

Jatin Khurana
źródło
5

W Visual Studio dla środowiska .Net 4.0

  1. Spróbuj dodać nowe odniesienie do projektu.
  2. Na karcie .Net, Wyszukaj System.Runtime.Serialization.
  3. Teraz możesz użyć using System.Runtime.Serialization. Błąd nie zostanie wyświetlony.
Md Kauser Ahmmed
źródło
0

Najpierw dodaję odniesienia do mojego modelu, a następnie używam ich w kodzie. Należy dodać dwa odniesienia:

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

problem został rozwiązany w moim programie. Mam nadzieję, że ta odpowiedź może ci pomóc. Dzięki.

użytkownik3342169
źródło
0

Rozwiązałem ten problem, dodając do odwołania C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ System.Runtime.Serialization.dll

RotatingWheel
źródło