Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

I have built a very simple web service using the VB.NET "WCF Rest Service Application" project template (Is this a good choice?). I works well except the fact that there is

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

added to my answer.

I have declared my return value as a String :

<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

So instead of having as answer this :

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

I get :

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

Is there any way I can avoid this unwanted serialization of my string answer?

like image 836
Pierre Watelet Avatar asked Aug 31 '12 13:08

Pierre Watelet


2 Answers

I just ran into this problem and solved it by applying the XmlSerializerFormat attribute to the service contract.

Here's a c# snippet - hope it helps you.

[ServiceContract(Namespace = "")]
[XmlSerializerFormat]
interface IHuggies
{
    [OperationContract]
    [WebInvoke(
        Method = "POST",
        UriTemplate = "/CheckIfConsumerExists")]
    bool CheckIfConsumerExists(string parameters);
}
like image 68
Aaron Anodide Avatar answered Oct 13 '22 18:10

Aaron Anodide


I think this will work, note the Stream as return argument.

<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
like image 39
Roman Marusyk Avatar answered Oct 13 '22 20:10

Roman Marusyk