2011-09-09 8 views
1

既存の.NetショップサイトをAndroidアプリに変換しようとしています。wcf restエスケープ文字をHTMLタグに追加する

(これはVBでの)

主要なオブジェクトの1つに製品データがあります。

そのオブジェクト内のインスタンスのために、そこにある:

<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 = retVal.Replace("\/", "/") 

単に「/」でHTMLタグを閉じて保存していますそれでも「RETVAL」自体は、まだ単に「/」で終了HTMLタグを記憶しているが、私はあれば、それは実際にどちらかのメモ帳に(戻ったときに、この時点では単に「/」

Return retVal 

で終了HTMLタグを記憶していますSeを走らせる直接、またはAndroidにrvice)「/」が突然「{バックスラッシュ} /」私がアンドロイドアプリで置き換えた文字列を行うことを試みた

次のようになります。

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

しかし、それは同じエラーを返します"無効なエスケープシーケンス..."、とにかく、私は本当に電話でこの種の仕事をしたくない。

戻り値retValでは、これらのエスケープ文字を突然挿入するために何が起こっていますか?

答えて

1

私はこれに対する答えを高く探し、最後に見つけました。

それは、WCF RESTサービスである:

私は同じ問題が発生して誰のために共有することになります。

WCFとAndroidを同時に学習すると、WCFの応答はJson形式でシリアル化されたStringでなければならないと私は考えました。

これを行うには、.Netオブジェクト、配列など、DataContractJsonSerializerを経由してさらに解析するためにStringとして返される前のもの。このような

何か:

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 

サービス:効果的WCFから「事前エスケープのデータをAndroidにJSONとして送信するためDataContractJsonSerializerを使用して

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 

。 Androidに到達すると、Jsonパーサーはデータをエスケープするため、これを処理できません。

関連する問題