Public Class Shohin Public Property 商品C As Integer Public Property 商品名 As String End Class
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim data() As Shohin ReDim data(2) Dim sw As New System.Runtime.Serialization.Json.DataContractJsonSerializer(GetType(Shohin)) Dim ms As New MemoryStream() Dim output As String For i = 0 To 2 data(i) = New Shohin data(i).商品C = DataGridView1.Rows(i).Cells(0).Value data(i).商品名 = DataGridView1.Rows(i).Cells(1).Value sw.WriteObject(ms, data(i)) Next output = Encoding.UTF8.GetString(ms.ToArray()) TextBox1.Text = output End Sub
> これですと、{}の間にカンマ(,)がついておりません。 それは For ループで For i = 0 To 2 sw.WriteObject(ms, data(i)) Next という出力方法をとっているからですよね。
Array を丸ごと渡しましょう。
Dim data() As Shohin = { New Shohin With {.商品C = 10000, .商品名 = "商品A"}, New Shohin With {.商品C = 10001, .商品名 = "商品B"}, New Shohin With {.商品C = 10002, .商品名 = "商品C"} } Dim serializer As New DataContractJsonSerializer(GetType(Shohin())) Dim ms As New MemoryStream() serializer.WriteObject(ms, data) TextBox1.Text = System.Text.Encoding.UTF8.GetString(ms.ToArray())
また、1つの課題なのですが、 実際には、商品レコードの数がソフト実行の度に異なるため、 下記のように「New Shohin With」を前もって決まった数だけ書いておけないという点があります。 この部分で、毎回読み取るレコードの数だけ、 New Shohin Withをループさせるようなことができるか、 が課題です。
研究してみます。
> Dim data() As Shohin = { > New Shohin With {.商品C = 10000, .商品名 = "商品A"}, > New Shohin With {.商品C = 10001, .商品名 = "商品B"}, > New Shohin With {.商品C = 10002, .商品名 = "商品C"} > } > Dim serializer As New DataContractJsonSerializer(GetType(Shohin())) > Dim ms As New MemoryStream() > serializer.WriteObject(ms, data) > TextBox1.Text = System.Text.Encoding.UTF8.GetString(ms.ToArray())
No35401 の元投稿が Dim data() As Shohin という 配列宣言だったからそれを真似ただけでのことです。 別に配列でも List(Of ) でも同じことですよ。
件数が不定なら、List(Of ) の方が良いでしょうね。
' 実際は data.Add(〜) を繰り返す感じになるはず Dim data As New List(Of Shohin)() From { New Shohin With {.商品C = 10000, .商品名 = "商品A"}, New Shohin With {.商品C = 10001, .商品名 = "商品B"}, New Shohin With {.商品C = 10002, .商品名 = "商品C"} }
'GetType を配列から List(Of ) に変更 Dim serializer As New DataContractJsonSerializer(GetType(List(Of Shohin))) Dim ms As New MemoryStream() serializer.WriteObject(ms, data)