2012-08-31 17 views
8

He creado un servicio web muy simple utilizando la plantilla de proyecto VB.NET "WCF Rest Service Application" (¿Es esta una buena opción?). Me funciona bien, excepto el hecho de que hayCómo evitar <string xmlns = "http://schemas.microsoft.com/2003/10/Serialization/">?

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/"> 
... 
</string> 

añade a mi respuesta.

he declarado mi valor devuelto como una cadena:

<WebInvoke(UriTemplate:="member/login", Method:="POST", 
      responseformat:=WebMessageFormat.Json, 
      BodyStyle:=WebMessageBodyStyle.Bare)> 
Public Function Create(data As IO.Stream) As String 

     Dim strData As String = New IO.StreamReader(data).ReadToEnd() 
     Dim UserAccessForm As LoginAccess = Me.getAnswer(strData) 
     Dim jsonAnswer As String 
     jsonAnswer = Newtonsoft.Json.JsonConvert.SerializeObject(UserAccessForm, Newtonsoft.Json.Formatting.None) 
     Return jsonAnswer 
End Function 

Así que en lugar de tener como respuesta la siguiente:

{"logged":false,"userID":"0","message":"Empty body"} 

me sale:

<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/"> 
{"logged":false,"userID":"0","message":"Empty body"} 
</string> 

¿Hay alguna Cómo puedo evitar esta serialización no deseada de mi cadena de respuestas?

+0

Probablemente todo lo anterior ya está listo para responder. Eche un vistazo aquí http://stackoverflow.com/a/8344219/1093668 – athoik

Respuesta

4

Acabo de encontrarme con este problema y lo resolví aplicando el atributo XmlSerializerFormat al contrato de servicio.

Aquí hay un fragmento de C# - espero que te ayude.

[ServiceContract(Namespace = "")] 
[XmlSerializerFormat] 
interface IHuggies 
{ 
    [OperationContract] 
    [WebInvoke(
     Method = "POST", 
     UriTemplate = "/CheckIfConsumerExists")] 
    bool CheckIfConsumerExists(string parameters); 
} 
-3
public String cleanOUTPUT(String OUTPUT) { 
    OUTPUT = OUTPUT.replaceAll("<string xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">",""); 
    OUTPUT = OUTPUT.replaceAll("</string>", "");  
return OUTPUT; 
} 
+0

explique su respuesta, mostrando lo que hace y cómo resuelve el problema. Esto ayudará a otros en el futuro –

2

creo que esto va a funcionar, tenga en cuenta el Stream como argumento de retorno.

<WebInvoke(UriTemplate:="member/login", Method:="POST", 
      responseformat:=WebMessageFormat.Json, 
      BodyStyle:=WebMessageBodyStyle.Bare)> 
Public Function Create(data As IO.Stream) As Stream 

     Dim strData As String = New IO.StreamReader(data).ReadToEnd() 
     Dim UserAccessForm As LoginAccess = Me.getAnswer(strData) 
     Dim jsonAnswer As String 
     jsonAnswer = Newtonsoft.Json.JsonConvert.SerializeObject(UserAccessForm, Newtonsoft.Json.Formatting.None) 
     Return New MemoryStream(ASCIIEncoding.Default.GetBytes(jsonAnswer)); 
End Function 
Cuestiones relacionadas