Как удалить пространство имен xml, когда возвращаемый тип является универсальным типом в wcf restful service - PullRequest
0 голосов
/ 02 сентября 2011

Ниже приведено определение интерфейса.

[OperationContract]
[WebGet(UriTemplate = "FacebookData/?accessToken={accessToken}")]
OperationResult<FacebookData> GetFacebookData(string accessToken);

Тип возврата OperationResult<FacebookData>, это универсальный тип

Тогда я получу xml, как следует ...

OperationResultOfFacebookDataNcCATIYq xmlns: i = "http://www.w3.org/2001/XMLSchema-instance"

Как я могу удалить пространство имен и переименовать элемент XML как «OperationResult»

Кстати, я уже установил, что Пространство имен пусто

[DataContract(Namespace = "")]
public class OperationResult<T>

но я думаю, что универсальный тип будет генерировать класс для каждого T.

Ответы [ 3 ]

2 голосов
/ 02 сентября 2011

Вы можете сделать [DataContract(Name = "OperationResult")], но на самом деле генерики концептуально не смешиваются с идеей сервисов RESTful.

Я бы предложил создать новый класс, например class FacebookOperationResult : OperationResult<FacebookData> {}, а затем использовать его в качестве типа возвращаемого значения.

0 голосов
/ 21 мая 2013

для удаления xmlns необходимо создать собственный сериализатор, чтобы обойти сериализацию, выполняемую WCF.

Интерфейс:

 [ServiceContract]
    public interface IService
    {
        [OperationContract]
        [WebInvoke(UriTemplate = "ProcessMessage")]
        AResponse ProcessMessage(ARequest content);
    }

Сервис: // изменить поведение на единицукоторый вам подходит

 [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall)] 
    public class Service : IService
    {
        public AResponse ProcessMessage(ARequest content)
        {
         //todo  
        }
    }

Вот самое важное:

[XmlRoot("My_Root", Namespace = "")]
ARequest : IXmlSerializable
{
    public string PropertyA { get; set; }

        public System.Xml.Schema.XmlSchema GetSchema()
        {
            return (null);
        }

        public void ReadXml(System.Xml.XmlReader reader)
        {
            if (!reader.IsEmptyElement)
            {
                reader.ReadStartElement();
                PropertyA = reader.ReadElementString("PropertyA");
                reader.ReadEndElement();
            }
        }

        public void WriteXml(System.Xml.XmlWriter writer)
        {
            writer.WriteElementString("PropertyA", PropertyA);

        }

}
0 голосов
/ 02 сентября 2011

Один из способов сделать это состоит в том, чтобы реализовать IDispatchMessageInspector - это позволяет проверять и изменять любой контент запроса / ответа так, как вам нужно / нужно ...

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