Свести коллекцию во время сериализации - PullRequest
0 голосов
/ 08 февраля 2010

Я пытаюсь преобразовать «коллекцию коллекций» в более привлекательный XML. По сути, я хочу солгать потребителю услуг и сделать так, чтобы существовал настоящий объект.

Это то, что WCF создает автоматически

<EntityPropertyCollection xmlns="http://schemas.datacontract.org/2004/07/CustomSerializer" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
 <EntityProperty>
  <Name>Test</Name>
  <Value i:nil="true"/>
 </EntityProperty>
 <EntityProperty>
  <Name>Test2</Name>
  <Value i:type="EntityPropertyCollection">
   <EntityProperty>
    <Name>Nested1</Name>
    <Value i:nil="true"/>
   </EntityProperty>
   <EntityProperty>
    <Name>Nested2</Name>
    <Value i:nil="true"/>
   </EntityProperty>
  </Value>
 </EntityProperty>
</EntityPropertyCollection>

Это то, чего я хотел бы достичь

<Something>
 <Test i:nil="true"/>
 <Test2 i:type="Something">
  <Nested1 i:nil="true"/>
  <Nested2 i:nil="true"/>
 </Test2>
</Something>

Будет полезен пользовательский сериализатор для определенного типа (EntityProperyCollection), но другие сообщения указывают, что это не вариант.

Я посмотрел на Суррогаты контрактов на данные. Я думаю, что мог бы сгенерировать пользовательский тип и позволить DataContractSerializer сериализовать сгенерированный тип. Но я надеюсь, что есть более простое решение.

1 Ответ

0 голосов
/ 09 февраля 2010

Вы можете реализовать IXmlSerializable на возвращаемом объекте и выполнить сериализацию вручную, или просто вернуть поток и использовать XmlWriter для создания именно того XML, который вы хотите.

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