Эффекты XmlIncludeAttribue при его использовании в WCF DataContract - PullRequest
0 голосов
/ 28 февраля 2012

1) Использует ли Binding при создании ChannelFactory какая разница в том, как работает сериализация / десериализация? (Я знаю, что используемая привязка должна соответствовать привязке службы на стороне сервера.)

Я использую атрибут KnownType в одном из моих DataContract, но он не работает. Но если я использую XmlIncludeAttribute , это работает! (Я перевожу свои сервисы ASMX в WCF. Но я не использую какие-либо MessageContracts, поскольку у меня есть свобода обновлять и прокси на стороне клиента.)

[XmlInclude (TypeOf (мужчины))] [DataContract] публичный абстрактный класс Person { [DataMember] public int Name {get; задавать; } }

2) Если я использую какой-либо атрибут (точнее, XmlInclude)), который использует XmlSerializer для WCF DataContract, использует ли WCF XmlSerializer вместо DataContractSerializer?

1 Ответ

0 голосов
/ 27 апреля 2012

DataContractSerializer поддерживает все, что поддерживает XmlSerializer, но обратное неверно. Но если тип декорируется с помощью [DataContract], он полностью переключается на новую модель программирования DataContract, полностью отказываясь от поддержки типов [Serializable], IXmlSerializable и т. Д., Которые в противном случае он имел бы.

Так что ваша магия [XmlInclude] работает, только если вы используете ASMX и традиционный XmlSerializer. Если вы используете DataContractSerializer, вы должны делать известные типы, а XML-измы, такие как [XmlInclude] и атрибуты XML, просто не поддерживаются. Вы все еще можете использовать XmlSerializer вместо DataContractSerializer, если хотите, хотя; все, что вам нужно сделать, это украсить службу или операцию, которую вы хотите переключить на XmlSerializer, с помощью [XmlSerializerFormatAttribute.]

Надеюсь, это поможет!

...