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?


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.


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.


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.

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.


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

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.