powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / wcf и сериализация класса в xml, хочется подправить результат, каК?
6 сообщений из 6, страница 1 из 1
wcf и сериализация класса в xml, хочется подправить результат, каК?
    #36405133
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
- <response xmlns="http://schemas.datacontract.org/2004/07/SyndicationServiceLibrary1" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
  <comment>erwer</comment> 
  </response>

вот получаю такой вывод при обращении по get запросу к своему wcf сервису.
сервис возвращает тип Response который обрамлен атрибутами:

Код: plaintext
1.
2.
3.
<System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.3082"), _
 System.Diagnostics.DebuggerStepThroughAttribute(), _
 System.Xml.Serialization.XmlTypeAttribute(AnonymousType:=True), _
 System.Xml.Serialization.XmlRootAttribute(Namespace:="" IsNullable:=False)>

хочется получить вывод такой:
Код: plaintext
1.
2.
3.
<?xml version="1.0" encoding="UTF-8"?>
<response>
  <comment>erwer</comment> 
 </response>
...
Рейтинг: 0 / 0
wcf и сериализация класса в xml, хочется подправить результат, каК?
    #36405227
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WCF Message Inspector либо на стороне клиента AfterReceiveReply, либо на стороне сервиса BeforeSendReply.

Перезаписываем сообщение, типа так

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
        {            
            MemoryStream memStream = new MemoryStream();
            XmlDictionaryWriter xdw = XmlDictionaryWriter.CreateBinaryWriter(memStream);
            xdw.WriteStartElement("s:Body");
            xdw.WriteStartElement("GetDataResponse", "http://tempuri.org/");
            xdw.WriteStartElement("GetDataResult", "http://tempuri.org/");
            xdw.WriteAttributeString("Units", "ounces");
            xdw.WriteString("50");
            xdw.WriteEndElement();
            xdw.WriteEndElement();
            xdw.WriteEndElement();
            xdw.Flush();
            memStream.Position = 0;

            XmlDictionaryReaderQuotas quotas = new XmlDictionaryReaderQuotas();
            XmlDictionaryReader xdr = XmlDictionaryReader.CreateBinaryReader(memStream, quotas);

            Message replacedMessage = Message.CreateMessage(reply.Version, null, xdr);
            replacedMessage.Headers.CopyHeadersFrom(reply.Headers);
            replacedMessage.Properties.CopyProperties(reply.Properties);
            reply = replacedMessage;            
        }
...
Рейтинг: 0 / 0
wcf и сериализация класса в xml, хочется подправить результат, каК?
    #36405260
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно и существующее сообщение XLinq-ом (или любыми xml-ными средствами) почикать, думаю.
А не создавать новое.
...
Рейтинг: 0 / 0
wcf и сериализация класса в xml, хочется подправить результат, каК?
    #36405279
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bured,

а , ничем другим не управляется этот момент?

просто мне для 1 параметра comment проще строчку отдавать с нужными декорациями.
...
Рейтинг: 0 / 0
wcf и сериализация класса в xml, хочется подправить результат, каК?
    #36405349
Фотография bured
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот всё что тебе нужно сделать.
По другому в голову ничего не приходит. Может где-то в настройках сериализера что-то есть.

инспектор
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
using System;
using System.Xml;
using System.IO;
using System.ServiceModel.Dispatcher;
using System.ServiceModel.Channels;


namespace client
{
public class MyInspector : IClientMessageInspector
{
public void AfterReceiveReply(ref System.ServiceModel.Channels.Message reply, object correlationState)
{
string action = reply.Headers.Action;
MessageVersion version = reply.Version; 
XmlDictionaryReader reader = reply.GetReaderAtBodyContents();
xml = reader.ReadOuterXml();
Message resp = Message.CreateMessage(version, action, xml); 
reply = resp;
}

public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel)
{
        return null;            
}

}
}
Поведение
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ServiceModel.Description;
using System.ServiceModel.Channels;
using System.ServiceModel.Dispatcher;


namespace client
{
    public class MyBehavior : IEndpointBehavior
    {
        public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
        {
            //no-op
        }

        public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
        {
            MyInspector inspector = new MyInspector();
            clientRuntime.MessageInspectors.Add(inspector);
        }

        public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
        {
            //no-op
        }

        public void Validate(ServiceEndpoint endpoint)
        {
            //no-op
        }
    }    

}

сам клиент
Код: plaintext
1.
2.
MyContractClient proxy = new MyContractClient("WSHttpBinding_IService");
            proxy.Endpoint.Behaviors.Add(new MyBehavior());
...
Рейтинг: 0 / 0
wcf и сериализация класса в xml, хочется подправить результат, каК?
    #36405434
AlexeiK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bured,

ну я понял тебя. у тебя более широкий механизм.

я решил перейти от использования классов , просто к xmldocument . потом xmldocument загоняю в memorystream и выкидываю наружу.

спасибо
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / wcf и сериализация класса в xml, хочется подправить результат, каК?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]