WCF XML-сериализация - PullRequest
       4

WCF XML-сериализация

0 голосов
/ 08 апреля 2009

Во времена сериализации 2.0 я мог создать сериализованную версию объекта, которая привела бы к следующему примеру:

<transactionMessage messageDate="1/1/2001 11:00PM" messageId="abc123">
    <transaction property1="Value" property2="value2" />
</transactionMessage>

Я бы сделал это с помощью атрибута Serializable () и затем добавил бы атрибуты XmlElement к своим элементам. Когда я использую атрибуты DataContract / DataMember, я получаю что-то похожее на это:

<transactionMessage>
  <messageDate>1/1/2001 11:00PM</messageDate>
  <messageId>abc123</mesageId>
  <transaction>
    <property1>Value</property1>
    <property2>Valu2</property2>
  </transaction>
</transactionMessage>

Обычно я бы не заботился о том, чтобы XML создавался за кулисами, но эта система будет взаимодействовать с несколькими внешними клиентами, которые уже общаются с другой системой (основанной на стиле сериализации 2.0) и я хочу сохранить структура похожа, но вносит дополнительные улучшения WCF.

Как я могу сказать атрибуту DataMember, чтобы по существу сделать форматирование более похожим на первый пример с атрибутами вместо элементов для всего?

Ответы [ 3 ]

2 голосов
/ 08 апреля 2009

Сериализатор DataContract был оптимизирован для скорости, и, похоже, дизайнер решил, что поддержка атрибутов на узлах XML не подходит для их требований к скорости.

Сериализатор DataContract не поддерживает атрибуты - если они вам нужны, используйте вместо этого почтенный XmlSerializer.

Марк

0 голосов
/ 08 апреля 2009

Что ж, после еще немного поисков, похоже, что это невозможно:

XMLSerializer против DataContractSerializer

Очень жаль, что MS не дал вам возможность изменить его.

0 голосов
/ 08 апреля 2009

Я не использую WCF, но попробуйте добавить

[XmlAttribute]

перед вашими свойствами messageDate и messageID.

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