FC2ブログ

記事一覧

クラスをJSON形式の文字列データに変換する方法 -シリアライズ- | VB.NET


以前の記事で VB.NETで JSON 文字列をクラスに変換するデシリアライズの方法を覚え書きしましたが、今回はその逆でクラスのインスタンスを JSON 文字列に変換する方法について覚え書きします。
JSON は NuGet パッケージをインストールして簡単に実現可能なソースコードが公開されていますが、不要な DLL を参照することになりますし、何かあった時の為にできるだけ外部 DLL には頼らないほうが良いと考えていますので、今回のコードは全て .Net のマネージコードなので、汎用性が高いものと考えています。


vb_json_02.png


前提条件
Windows 7 professional 以降 / Windows Server 2008 R2 以降
Visual Studio 2010 professional 以降
VB.net
.Net FrameWork 4.0 以降



1.ViewModelクラス

json 形式のデータを保持するためのクラスを作成します。
ポイントとしては、変換するオブジェクトのクラス名に DataContract の属性を設定し、プロパティには DataMember 属性を設定します。プロパティの名称はjsonの文字列と全く同じにします。(大文字小文字記号など区別されます)
※プロジェクトの参照設定に System.Runtime.Serialization.dll を追加することが前提です。

Customer.vb
Imports System.Runtime.Serialization
<DataContract()>
Public Class Customer

<DataMember()>
Public Property Id As Integer = 0

<DataMember()>
Public Property Name As String = String.Empty

<DataMember()>
Public Property Age As Integer = 0

<DataMember()>
Public Property Gender As Integer = 0

End Class



2.JSON 文字列に変換する方法

System.IO.MemoryStream と StreamReader でインスタンスを読み込み、DataContractJsonSerializer (シリアライザー)でシリアライズした文字列を取得します。
※プロジェクトの参照設定に System.Runtime.Serialization.dll を追加することが前提です。

JsonUtility.vb
Imports System.Runtime.Serialization.Json
Public Class JsonUtility

''' <summary>
''' オブジェクトをJSON文字列に変換する
''' </summary>
''' <param name="obj">変換するオブジェクト型</param>
''' <returns>変換後のJSON文字列</returns>
''' <remarks></remarks>
Public Shared Function GetJson(ByVal obj As Object) As String

'JSON文字列にシリアライズ
Dim tp As Type = obj.GetType
Dim result As String = String.Empty
Dim serializer As New DataContractJsonSerializer(tp)

Using stream As New IO.MemoryStream()
Using sr As New IO.StreamReader(stream)
serializer.WriteObject(stream, obj)
stream.Position = 0
result = sr.ReadToEnd
End Using
End Using

Return result

End Function

End Class



3.使用方法

先ほど作成した JsonUtility を以下のように呼び出し、引数にクラスのインスタンスを渡した結果を変数に格納します。

TestForm.vb
Private Sub btnReadInstance_Click(sender As Object, e As EventArgs) Handles btnReadXml.Click

Dim entity As New Customer()
entity.Id = 1
entity.Name = "名前1"
entity.Age = 10
entity.Gender = 1
Dim json As String = JsonUtility.GetJson(entity)
Console.WriteLine(json)

End Sub


以上で クラスのインスタンスを JSON 文字列に変換することができます。





最後までお読みいただき、ありがとうございます。
他にも VB.net に関する記事 をご紹介しておりますのでご参考頂ければ幸いです。



関連記事

コメント

コメントの投稿

※名前とタイトルが入力されていないコメントでは他のコメントとの区別ができません。

 入力されていないコメントには返信しませんのであらかじめご了承くださいませ。

※ニックネームでも良いので必ずご入力ください。

    

※必ずご入力ください。

    
    

※必ずご入力ください。

※技術的な質問には環境やエラーについて正確かつ詳細にお教えください。

・正確なエラーの内容

・Windowsのバージョン番号

・Visual Studioのバージョン

・機器の型番

・アプリやソフトのバージョン

    

カテゴリ別記事一覧

広告

プロフィール

石河 純


著者名 :石河 純
自己紹介:素人上がりのIT技術者。趣味は卓球・車・ボウリング

IT関連の知識はざっくりとこんな感じです。
【OS関連】
WindowsServer: 2012/2008R2/2003/2000/NT4
Windows: 10/8/7/XP/2000/me/NT4/98
Linux: CentOS RedHatLinux9
Mac: macOS Sierra 10.12 / OSX Lion 10.7.5 / OSX Snow Leopard 10.6.8
【言語・データベース】
VB.net ASP.NET C#.net Java VBA
Xamarin.Forms
Oracle10g SQLServer2008R2 SQLAnywhere8/11/16
ActiveReport CrystalReport ReportNet(IBM)
【ネットワーク関連】
CCNP シスコ技術者認定
Cisco Catalyst シリーズ
Yamaha RTXシリーズ
FireWall関連
【WEB関連】
SEO SEM CSS IIS6/7 apache2

休みの日は卓球をやっています。
現在、卓球用品通販ショップは休業中です。