HttpWebRequestでJSONをシリアライズ/デシリアライズして通信する



VB.NETでJSONフォーマットのデータを送受信するクライアントプログラムを作成しました。

通信には.NETFramework4で使用できるHttpWebRequestクラスを使っています。

以下サンプル。

DataContractJsonSerializerクラスを使ってシリアル化、逆シリアル化する。

JSONフォーマット専用のクラスを作成して、DataContractJsonSerializerクラスでシリアライズします。

JSONフォーマット用クラス

送信用のJSONフォーマットクラスはこんな感じ。
Public Class JsonDataSend
    Public Property systemCode() As String
    Public Property systemMessage() As String
End Class

接続先から返されるJSONは以下のようなイメージで。
{"PostMethodResult":{"Message":"Hello WORLD"}}

受信用のJSONフォーマットクラスはこんな感じ。
Public Class JsonDataRecv
    Public Property PostMethodResult As PostResult
End Class

Public Class PostResult
    Public Property Message As String
End Class

JSONデータ送受信クライアント

Imports System.Runtime.InteropServices
Imports System.Net
Imports System.Security.Cryptography.X509Certificates
Imports System.Runtime.Serialization.Json

Public Class Class1

    Public Function JsonSendClient(ByVal sURL As String, ByVal systemCode As String, ByVal systemMessage As String) As String

        ''送信データ作成(JSON形式)
        Dim sendData As JsonDataSend = New JsonDataSend
        sendData.systemCode = systemCode
        sendData.systemMessage = systemMessage

        ''HttpWebRequestインスタンス初期化
        Dim req As HttpWebRequest = WebRequest.Create(sURL)
        ''エンコーディング
        Dim enc As System.Text.Encoding = System.Text.Encoding.GetEncoding("utf-8")
        ''POST送信
        req.Method = "POST"
        ''認証情報
        req.Credentials = CredentialCache.DefaultCredentials
        ''Accept HTTPヘッダー
        req.Accept = "application/json"
        ''ContentType HTTPヘッダー
        req.ContentType = "application/json"

        ''JSONデータシリアライズ用
        Dim jsonSerializer As DataContractJsonSerializer = Nothing
        ''要求データ書き込み
        Using reqStream As System.IO.Stream = req.GetRequestStream
            jsonSerializer = New DataContractJsonSerializer(GetType(JsonDataSend))
            jsonSerializer.WriteObject(reqStream, sendData)
        End Using

        ''リソースからの応答取得
        Dim resp As HttpWebResponse = req.GetResponse

        ''応答本文読み取り
        Dim body As String = String.Empty
        Using respStream As System.IO.Stream = resp.GetResponseStream
            Using reader As New System.IO.StreamReader(respStream)
                body = reader.ReadToEnd
            End Using
        End Using

        ''受信データ(JSON)をデシリアライズ
        Dim recvJson As JsonDataRecv
        jsonSerializer = New DataContractJsonSerializer(GetType(JsonDataRecv))
        Using stream As New IO.MemoryStream(Text.Encoding.UTF8.GetBytes(body))
            recvJson = DirectCast(jsonSerializer.ReadObject(stream), JsonDataRecv)
        End Using

        Return recvJson.PostMethodResult.Message

    End Function
End Class

まとめ

.NETFramework4.5以上であればHttpClientクラスが使えるので、もっと簡単に書けます。

上記サンプルは.NETFramework4以前の環境でも動作するように作りました。

SSL通信する場合は、例によって「信頼されないSSL証明書の回避」が必要です。

以上

<スポンサーリンク>


0 件のコメント :

コメントを投稿