2011-09-09 23 views
1

我試圖將現有的.Net商店網站轉換爲Android應用程序。wcf rest將轉義字符附加到HTML標記

(這是在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插入這些轉義序列?

感謝 戴夫

UPDATE:

我已經跟蹤下來的東西,WCF是做(?)。這裏是一個返回JSON字符串我的代碼的最後位:

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

此時「retVal的」被存儲只有「/」

retVal = retVal.Replace("\/", "/") 

結束的HTML標籤在這一點上「retVal的」仍然存儲關閉HTML標籤只有「/」

Return retVal 

此時「retVal的」本身仍然是存儲關閉HTML標籤只有「/」,但是當它實際上返回(無論是記事本,如果我運行Se起動轉矩直接,或到Android)「/」突然變得「{}反斜線/」

我試圖做一個字符串中的Android應用程序替換:

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

但返回的同樣的錯誤「無效的轉義序列...」,無論如何,我真的不想在手機上做這種工作。

所以,在返回retVal時突然插入所有這些轉義字符?

回答

1

我已經搜索了高和廣泛的答案,並終於找到它。

我將分享其他人遇到同樣的問題:

它是WCF REST服務。

同時學習WCF和Android讓我相信來自WCF的響應應該是以Json格式序列化的字符串。

要做到這一點,.Net對象,數組或任何會通過DataContractJsonSerializer之前作爲一個字符串返回到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用於發送作爲JSON來從WCF有效Android的預逃逸「的數據。當它到達Android時,Json解析器無法處理它,因爲它也會轉義數據。