Атрибут DataContractSerializer KnownType не соблюдается? - PullRequest
0 голосов
/ 20 апреля 2010

У меня есть класс, который украшен атрибутом KnownType с типом класса. Разве это не разрешено?

  [KnownType(typeof(Occ600UIConfig))]
    public class Occ600UIConfig 
    { }

Если да, то почему DCS выдает следующее исключение?

{"Ошибка в строке 1 позиции 387. Элемент «http://schemas.microsoft.com/2003/10/Serialization/Arrays:Value' содержит данные «http://schemas.datacontract.org/2004/07/OCC600.Infrastructure.Dictionary.BusinessEntities:Occ600UIConfig' данные договора. Десериализатор не имеет знание любого типа, который отображается на этот контракт. Добавить тип соответствует 'Occ600UIConfig' для список известных типов - например, с помощью KnownTypeAttribute атрибут или добавив его в список известных типов, переданных DataContractSerializer. "}

1 Ответ

4 голосов
/ 20 апреля 2010

Атрибут KnownType используется для определения и «объявления» классов-потомков базового класса, которые также могут использоваться в данном контексте.

Но ваш класс данных в WCF должен быть помечен в первую очередь атрибутом [DataContract] (и все члены, которые вы хотите включить в атрибут [DataMember]):

[DataContract]
public class Occ600UIConfig 
{ }

Если у вас нет иерархий наследования, вам никогда не понадобится атрибут KnownType.

...