8

我使用 VB.NET“WCF Rest Service Application”项目模板构建了一个非常简单的 Web 服务(这是一个不错的选择吗?)。我工作得很好,除了有

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

添加到我的答案中。

我已将返回值声明为 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

因此,不要将其作为答案:

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

我得到:

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

有什么办法可以避免我的字符串答案的这种不需要的序列化?

4

5 回答 5

4

我刚刚遇到了这个问题,并通过将XmlSerializerFormat属性应用于服务合同来解决它。

这是 ac# 片段 - 希望它对您有所帮助。

[ServiceContract(Namespace = "")]
[XmlSerializerFormat]
interface IHuggies
{
    [OperationContract]
    [WebInvoke(
        Method = "POST",
        UriTemplate = "/CheckIfConsumerExists")]
    bool CheckIfConsumerExists(string parameters);
}
于 2013-02-21T03:53:57.967 回答
2

我认为这会起作用,请注意Streamas return 参数。

<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
于 2015-11-12T23:27:30.370 回答
0

我对此做了很多阅读,看起来 XML 是 C# 中的标准响应。我最终得到了这个:

    private void MakeCall()
    {
         RestClient rc = new RestClient();
         ...
         var jsonData = returnJson( rc.MakeRequest());
         ...
    }

    private string returnJson(string response)
    {
        XmlDocument doc = new XmlDocument();
        doc.LoadXml(response);
        return doc.DocumentElement.FirstChild.InnerText;
    }
于 2020-05-04T20:13:24.570 回答
0

这似乎有效(responseformat.Json 是魔术词):

    [WebGet(UriTemplate = "/json")]
    [ScriptMethod(ResponseFormat = ResponseFormat.Json)]
    public string json()
    {
        return "{\"test\":\"ok\"}";
    }
于 2018-07-10T05:33:41.137 回答
-3
public String cleanOUTPUT(String OUTPUT) {
    OUTPUT = OUTPUT.replaceAll("<string xmlns=\"http://schemas.microsoft.com/2003/10/Serialization/\">","");
    OUTPUT = OUTPUT.replaceAll("</string>", "");    
return OUTPUT;
}
于 2014-07-30T11:53:03.177 回答