Простір імен для [DataContract]


230

Я не можу знайти простір імен для використання [DataContract]та [DataMember]елементів. Згідно з тим, що я знайшов, здається, що додавання наступного має бути достатньою, але в моєму випадку це не так.

using System;
using System.Runtime.Serialization;

Ось фрагмент мого коду:

using System;
using System.Runtime.Serialization;

namespace MyNamespace {

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

І помилка, яку я отримую:

Не вдалося знайти ім'я типу або простору імен "DataContract" (не вистачає директиви чи посилання на збірку?)

Чи я не використовую правильні простори імен?


Використовуючи VS 2017, помилку компілятора, не вдається скласти, жодне повідомлення у списку помилок чи будь-яка вказівка. Ні забарвлення синтаксису DataContract, нічого.
dudeNumber4

@ dudeNumber4 Клацніть правою кнопкою миші на вашому проекті Додати / Довідку. У діалоговому вікні знайдіть System.Runtime.Serialization та перевірте прапорець у стані прапорця. Потім натисніть "Гаразд"
Сім Мак

Відповіді:


433

DataContractAttributeКлас знаходиться в System.Runtime.Serializationпросторі імен.

Ви повинні додати посилання на System.Runtime.Serialization.dll. Але ця збірка за замовчуванням не посилається. Щоб додати посилання на ваш проект, вам потрібно перейти до Посилання -> Додати довідник у Провіднику рішень і додати посилання на збірку вручну.


59
.... і ця збірка за замовчуванням не посилається, тому вам доведеться перейти References -> Add Referenceв Провідник рішень і додати посилання на збірку ...
marc_s

11
Це все, я не мав посилання в своєму рішенні! Я думав, що якщо потрібна довідка, це призведе до помилки в рядку using System.Runtime.Serialization;. Напевно, я помилявся :)
Отіель,

2
Тьфу. Чому на Землі не помилка у usingвисловлюванні? Це, здається, має для мене сенс.
Ятрікс

7
Я думаю, це тому, що інша dll використовує цю область імен (інакше ви отримаєте помилку)
Gui

4
Дякую! Жоден із прикладів Microsoft док. Про це не згадує.
BobRodes


5

Атрибут [DataContract] та [DataMember] знаходяться в просторі імен System.ServiceModel, який знаходиться в System.ServiceModel.dll.

System.ServiceModel використовує простори імен System і System.Runtime.Serialization, щоб серіалізувати члени даних.


5

У візуальній студії для .Net 4.0,

  1. Спробуйте додати нове посилання на проект.
  2. На вкладці .Net, пошук System.Runtime.Serialization.
  3. Тепер ви можете використовувати using System.Runtime.Serialization. І помилка не буде показана.

0

Спочатку я додаю посилання до своєї Моделі, потім використовую їх у своєму коді. Ви повинні додати дві посилання:

за допомогою System.ServiceModel;
використання System.Runtime.Serialization;

потім ця проблема була вирішена в моїй програмі. Я сподіваюся, що ця відповідь може вам допомогти. Дякую.


0

Я вирішив цю проблему, додавши в посилання C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.0 \ System.Runtime.Serialization.dll

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.