Почему я не могу использовать атрибут KnownType в своем классе WCF? - PullRequest
3 голосов
/ 22 марта 2011

Я использую WCF для получения коллекции объектов. Все объекты относятся к типу ProtocolText, но могут относиться к дочерним классам SuspensionText или ResurationText, оба из которых наследуются отProjectText.

public class ProcedureText { }
public class SuspensionText : ProcedureText { }
public class ResumptionText : ProcedureText { }

My OperationContract указывает метод, возвращающий массив объектов процедурного текста:

[OperationContract]
[WebGet(UriTemplate = "procedureTexts")]
ProcedureText[] GetProcedureTexts();

Это работает, если я приведу все свои объекты к ProtocolText, но я хочу сохранить различие в использовании подтипов. Я надеялся использовать атрибут KnownType, чтобы сделать это, и ожидал, что смогу сделать это, добавив его в мой класс AdditionalText:

[System.Runtime.Serialization.KnownType(typeof(SuspensionTextDto))]
[System.Runtime.Serialization.KnownType(typeof(ResumptionTextDto))]
public class ProcedureText { }

Это не работает, потому что компилятор не может разрешить System.Runtime.Serialization.KnownType. Из документа я знаю, что атрибут является частью .NET Framework 4, но я использую .NET Framework 4 и это Target Frameweork для моего проекта.

Почему мне нужно установить, чтобы можно было использовать атрибут?

1 Ответ

6 голосов
/ 22 марта 2011

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

System.Runtime.Serialization

Использование описано в документации:

http://msdn.microsoft.com/en-us/library/system.runtime.serialization.knowntypeattribute.aspx

В основном этоЭто так, что сериализатор распознает тип.Ваш контракт на обслуживание возвращает массив базового класса, однако типы в этом массиве могут быть более производными.Если сериализатору не сказано об этом, я думаю, что сериализация не удастся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...