Как получить правильный вывод пространства имен - PullRequest
1 голос
/ 22 ноября 2011

У меня есть класс, который реализует IXmlSerializable. Когда я использую пользовательский XmlWriter / XmlReader, он просто отлично работает и выводит правильный вывод. Однако, когда я использую его в WCF, я получаю очень чистый вывод, он слишком чистый, потому что не содержит никакой информации о типе:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
        <GetModelCResponse xmlns="http://tempuri.org/">
            <GetModelCResult>
                <D xmlns="">D</D>
                <E xmlns="">
                    <B>B</B>
                    <A>A</A>
                </E>
            </GetModelCResult>
        </GetModelCResponse>
    </s:Body>
</s:Envelope>

Однако я ожидал бы что-то вроде этого (что он пишет пишет при использовании XmlWriter):

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
    <s:Body>
        <GetModelCResponse xmlns="http://tempuri.org/">
            <GetModelCResult xmlns:a="http://schemas.datacontract.org/2004/07/Model" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
                <a:D>D</a:D>
                <a:E i:type="a:ModelA">
                    <a:A>A</a:A>
                    <a:B>B</a:B>
                </a:E>
            </GetModelCResult>
        </GetModelCResponse>
    </s:Body>
</s:Envelope>

Что я делаю не так? Это проблема конфигурации?

Ответы [ 2 ]

1 голос
/ 23 ноября 2011

Вы можете изменить сериализатор, который использует wcf.

Один из способов добиться этого - декорировать атрибутом

[XmlSerializerFormat]

в верхней части реализации службы.

Если вам нужно еще несколько наворотов, вы можете рассмотреть возможность создания собственного сериализатора.

Некоторое время назад Дэн Ригсби написал статью на эту тему на его блог .В конце статьи он обсуждает создание реализации IOperationBehavior для

Идея достаточно проста - создать поведение операции, которое заменяет обычный сериализатор на собственный.Пока этот класс наследуется от Attribute, вы можете использовать его для украшения реализации.

0 голосов
/ 22 ноября 2011

Некоторое время назад у нас было нечто подобное, и я отметил это в своих прошлых заметках: http://www.pluralsight -training.net / сообщества / блоги / kirillg / Архив / 2006/06/18 / 28380.aspx

Посмотрите, дает ли это некоторую полезную информацию здесь.

...