2

RestSharpを使用してWebサービスを呼び出す次のコードがあります。コードはエラーなしで実行されますが、response.Dataを見ると、Resultオブジェクトが逆シリアル化されておらず、デフォルト値が含まれていることがわかります。

<Serializable()> <DataContract()> _
Private Class Result
  <DataMember(IsRequired:=False)> _
  Public responseCode As Long
  <DataMember(IsRequired:=False)> _
  Public responseMessage As String
  Friend Const RESULT_OK As Long = 2000
End Class

Private Function Login(ByVal user As String, ByVal password As String) As  RestResponseCookie
  Dim req As New RestRequest("authenticationService/authentication/signIn", Method.POST)
  req.RequestFormat = DataFormat.Json
  Dim input As New SigninInput
  input.requestParameters.username = user
  input.requestParameters.password = password
  req.AddBody(input)

  Dim response As RestResponse(Of Result) = getRestClient().Execute(Of Result)(req)
  If response.StatusCode = HttpStatusCode.OK Then
    Dim res As Result = response.Data
  End If
  Return Nothing
End Function

ここで、コードを次のように変更すると、次のようになります。

  Dim response As RestResponse = getRestClient().Execute(req)
  If response.StatusCode = HttpStatusCode.OK Then
    Dim des As New Json.DataContractJsonSerializer(GetType(Result))
    Dim res As Result = CType(des.ReadObject(New IO.MemoryStream(response.RawBytes)), Result)
  End If

デシリアライズは問題なく実行されます。動作していないバージョンのコードの結果をデバッグしようとしましたが、内容は問題ないようです。これは私が取得するコンテンツです: "{" responseMessage ":" Success:Your request issuccessfullycompleted。"、" responseCode ":2000}"そしてContentTypeは本来なら "application/json"です。

動作するコードを実行しても問題ありませんが、RestSharpによる逆シリアル化が正しく行われない理由を知っていただければ幸いです。

4

1 に答える 1

1

RestSharp はフィールドにデシリアライズしません。それらをプロパティに変更する必要があります。その後、機能するはずです。

于 2012-05-16T17:38:55.150 に答える