Пространство имен для [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 (отсутствует директива using или ссылка на сборку?)

Я не использую правильные пространства имен?


Используя VS 2017, ошибка компилятора, невозможно построить, нет сообщений в списке ошибок или каких-либо указаний вообще. Нет синтаксической раскраски DataContract, ничего.
dudeNumber4

@ dudeNumber4 Щелкните правой кнопкой мыши по вашему проекту Add / Reference. В диалоговом окне найдите System.Runtime.Serialization и установите флажок для проверки состояния. Затем нажмите «ОК»
Сим Мак

Ответы:


433

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

Вы должны добавить ссылку на System.Runtime.Serialization.dll. На эту сборку по умолчанию нет ссылок. Чтобы добавить ссылку на ваш проект, вам нужно перейти в «Ссылки» -> «Добавить ссылку» в обозревателе решений и добавить ссылку на сборку вручную.


59
.... и эта сборка не указана по умолчанию, поэтому вам нужно перейти References -> Add Referenceв Solution Explorer и добавить ссылку на сборку ...
marc_s

11
Вот и все, у меня не было ссылки в моем решении! Я думал, что если бы ссылка была необходима, я получил бы ошибку на линии using System.Runtime.Serialization;. Я предполагаю, что я был неправ :)
Otiel

2
Тьфу. Почему на земле нет ошибки в usingутверждении? Это, кажется, имеет смысл для меня.
Yatrix

7
Я думаю, это потому, что другой dll использует это пространство имен (в противном случае вы получите ошибку)
Gui

4
Спасибо! Ни один из примеров документа Microsoft не упоминает об этом.
BobRodes


5

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

System.ServiceModel использует пространства имен System и System.Runtime.Serialization для сериализации камер данных.


5

В визуальной студии для .Net 4.0 framework,

  1. Попробуйте добавить новую ссылку на проект.
  2. На вкладке .Net, Поиск System.Runtime.Serialization.
  3. Теперь вы можете использовать using System.Runtime.Serialization. И ошибка не будет показана.

0

Сначала я добавляю ссылки на мою модель, затем использую их в своем коде. Есть две ссылки, которые вы должны добавить:

using 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.