Я пытаюсь преобразовать «коллекцию коллекций» в улучшенный 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 сериализовать сгенерированный тип. Но я надеюсь, что есть более простое решение.
Я пробовал это. Как вы сказали, он работает для Xml. Однако я не мог найти эквивалент JSON для служб REST. DataContractSerializer запечатан, к сожалению. Я думаю, что вернусь к суррогату; сгенерируйте тип и пусть сериализаторы работают так, как обычно. Спасибо за помощь –
Зайдите в стартовый комплект WCF REST. В нем есть библиотека под названием Microsoft.Http и Microsoft.Http.Extensions. В нем есть некоторые сериализаторы Json и десериализаторы. Вы должны использовать их для создания потока JSON. Эти классы предназначены для использования на клиенте, но они также работают на сервере. –
Спасибо за предложение. Сегодня я не мог работать над этим. Когда я вернусь к нему, я дам вам знать, как это происходит. –