wcf rest将转义字符附加到HTML标记

时间:2011-09-09 00:08:20

标签: wcf

我正在尝试将现有的.Net商店网站转换为Android应用。

(这是在VB中)

其中一个主要对象包含产品数据。

在该对象中,例如:

<H2>Product Title</H2>
<P>A description</P>

我已经构建了一个WCF Rest服务,它返回我期望的数据:...

话虽如此,我已经尝试过生产相同但不同的输出的Newtonsoft.Json和DataContractJsonSerializer。

使用Newtonsoft.Json在调试中运行WCF服务时,它会按照我的预期返回这些项目:

Newtonsoft:

<H2>Product Title<\/H2><P>A description<\/P>

DataContractJsonSerializer:

<H2>Product Title<\\\/H2><P>A description<\\\/P>

然而,当我通过Eclipse运行Android应用程序时,我得到“无效的转义序列(有效转义序列为\ b \ t \ n \ f \ r \”\“\”)的错误“

所以,简而言之;如何阻止Newtonsoft或DataContractJsonSerializer插入这些转义序列?

由于 戴夫

更新:

我已将此跟踪到WCF正在做的事情(?)。这是我的代码的最后一位,它返回JSON字符串:

retVal = CacheManager.JSONFullProduct("P" & ProductID)

此时'retVal'正在存储仅使用'/'

的结束HTML标记
retVal = retVal.Replace("\/", "/")

此时'retVal'仍然只用'/'

存储关闭的HTML标签
Return retVal

此时'retVal'本身仍然只用'/'存储关闭的HTML标签,但是当它实际返回时(如果我正在运行服务直接或安装到Android,则为记事本)'/'突然变为' {反斜杠} /'

我试图在Android应用程序中进行字符串替换:

result.replace("\/", "/");

但是返回“无效转义序列......”的相同错误,无论如何,我真的不想在手机上做这种工作。

那么,Return retVal会突然插入所有这些转义符?

1 个答案:

答案 0 :(得分:1)

我已经广泛搜索了这个答案,并最终找到了它。

我将与其他遇到同样问题的人分享:

这是WCF休息服务。

同时学习WCF和Android让我相信WCF的响应应该是以Json格式序列化的String。

要做到这一点,.Net对象,数组或其他任何东西在通过DataContractJsonSerializer返回之前作为String返回到Android进行进一步解析。

这样的事情:

Dim stream1 As MemoryStream = New MemoryStream
Dim ser As DataContractJsonSerializer = New DataContractJsonSerializer(GetType(myType))
ser.WriteObject(stream1, myThing)
Dim _json As String = Encoding.UTF8.GetString(stream1.ToArray())
stream1.Close()
return _json

错误。

保留你的对象,数组或其他东西,然后返回; WCF将为您妥善保管。

例如(这是VB);

IService:

<OperationContract()> _
<WebGet(BodyStyle:=WebMessageBodyStyle.WrappedRequest, RequestFormat:=WebMessageFormat.Json, ResponseFormat:=WebMessageFormat.Json, UriTemplate:="/MyKit/{AccountID}")> _
Function GetKit(ByVal AccountID As String) As MyKit

服务:

Public Function GetKit(ByVal AccountID As String) As MyKit Implements IService1.GetKit

    Dim allKit As New MyKit() //Your object
    objDal.CommandText = 'run some sql here - or whatever

    Using dr As SqlDataReader = "blah"

    //populate your object

    End Using

    Return allKit //return the object, not the string representation of it

End Function

使用DataContractJsonSerializer从WCF发送Json到Android有效地“预先转义”数据。当它到达Android时,Json解析器无法处理它,因为它也会转义数据。