Атрибут DataContractSerializer KnownType не соблюдается?

У меня есть класс, который украшен атрибутом 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 ответ

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

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

[DataContract]
public class Occ600UIConfig 
{ }

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

Другие вопросы по тегам