ชุมชนคนรักภาษาเบสิค - Visual Basic Community

 ลืมรหัสผ่าน
 ลงทะเบียน
ค้นหา
ดู: 4515|ตอบกลับ: 0

[VB.NET] การแปลงข้อมูลจาก DataTable ให้อยู่ในรูปแบบ JSON

[คัดลอกลิงก์]

320

กระทู้

512

โพสต์

6583

เครดิต

ผู้ดูแลระบบ

ทองก้อน ทับทิมกรอบ

Rank: 9Rank: 9Rank: 9

เครดิต
6583



สำหรับโค้ดในวันนี้แอดมินจะทำการจำลองเหตุการณ์ว่า เราสามารถนำข้อมูลมาจากฐานข้อมูลใดๆก็ได้ เช่น MS Access, MSSQL หรือ MySQL มาใส่ไว้ใน DataTable จากนั้นทำการแปลงข้อมูล (Serialize) เหล่านี้ให้อยู่ในรูปแบบของ JSON (JavaScript Object Notation) ซึ่งมันก็เป็นรูปแบบ Text File ธรรมดานี่แหละ คล้ายๆกับ XML (Extensible Markup Language) เพียงแต่มีการจัดรูปแบบที่แตกต่างกันออกไป จากนั้นทำการแยกแยะข้อมูล JSON เข้ามาแสดงผลไว้ใน DataGridView นอกจากนี้แอดมินยังได้นำเสนอ การเลือกเอาเฉพาะบางฟิลด์มาแสดงผลลงใน ListView ส่วน TextBox จะแสดงรูปแบบข้อมูลของ JSON

Add Reference ... NewtonSoft.Json.Net20 จะอยู่ในโฟลเดอร์ Package และต้อง Add System.Web.Extensions ที่อยู่ใน .Net Framework ด้วย


มาดูโค้ดต้นฉบับกันเถอะ
  1. Imports Newtonsoft.Json
  2. Imports System.IO
  3. Imports System.Net

  4. '// Add a reference to System.Web.Extensions & .Net Framework 4.0
  5. Public Class frmJsonSample

  6.     Private Sub frmJson_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
  7.         Dim dt As New DataTable
  8.         '// Create DataTable
  9.         dt = CreateDataTable()
  10.         '// Convert DataTable to JSON Format
  11.         Dim _json As String = GetJson(dt)
  12.         '// Sample JSON.
  13.         '// {"ID":"1","Name":"Sample-001"}
  14.         txtJson.Text = _json
  15.         Try
  16.             '// Parsing JSON Data and display in DataGridView.
  17.             dgvData.DataSource = DeserializeDataTable(_json)
  18.             '// Show only Name in ListBox.
  19.             GetNames(_json)
  20.         Catch ex As WebException
  21.             MessageBox.Show("Error: " & ex.ToString())
  22.         End Try
  23.     End Sub

  24.     Private Function CreateDataTable() As DataTable
  25.         Dim dt As New DataTable
  26.         dt.Columns.Add("ID", GetType(Integer))
  27.         dt.Columns.Add("Name", GetType(String))
  28.         For i As Integer = 1 To 10
  29.             dt.Rows.Add()
  30.             dt.Rows(i - 1)(0) = i
  31.             dt.Rows(i - 1)(1) = "Sample-" & Microsoft.VisualBasic.Right("000" & i, 3)
  32.         Next
  33.         Return dt
  34.     End Function

  35.     '// DataTable to JSON.
  36.     Private Function GetJson(ByVal dt As DataTable) As String
  37.         '// References ... System.Web.Extensions
  38.         Dim Jserializer As New System.Web.Script.Serialization.JavaScriptSerializer()
  39.         Dim rowsList As New List(Of Dictionary(Of String, Object))()
  40.         Dim row As Dictionary(Of String, Object)
  41.         For Each dr As DataRow In dt.Rows
  42.             row = New Dictionary(Of String, Object)()
  43.             For Each col As DataColumn In dt.Columns
  44.                 row.Add(col.ColumnName, dr(col))
  45.             Next
  46.             rowsList.Add(row)
  47.         Next
  48.         Return Jserializer.Serialize(rowsList)
  49.     End Function

  50.     Public Function DeserializeDataTable(json As String) As DataTable
  51.         Dim dt As DataTable
  52.         dt = TryCast(JsonConvert.DeserializeObject(json, (GetType(DataTable))), DataTable)
  53.         Return dt
  54.     End Function

  55.     Private Sub GetNames(strJSON As String)
  56.         Dim Names = JsonConvert.DeserializeObject(Of List(Of ItemsJSon))(strJSON)
  57.         '//
  58.         For Each itm In Names
  59.             lvwGetField.Items.Add(itm.name)
  60.         Next
  61.     End Sub

  62. End Class

  63. Public Class ItemsJSon
  64.     Public Property id As String
  65.     Public Property name As String
  66. End Class
คัดลอกไปที่คลิปบอร์ด

ดาวน์โหลดโค้ดต้นฉบับ VB.NET (2010) ได้ที่นี่ ...

ขออภัย! โพสต์นี้มีไฟล์แนบหรือรูปภาพที่ไม่ได้รับอนุญาตให้คุณเข้าถึง

คุณจำเป็นต้อง ลงชื่อเข้าใช้ เพื่อดาวน์โหลดหรือดูไฟล์แนบนี้ คุณยังไม่มีบัญชีใช่ไหม? ลงทะเบียน

x
สิ่งที่ดีกว่าการให้ คือการให้แบบไม่มีที่สิ้นสุด
ขออภัย! คุณไม่ได้รับสิทธิ์ในการดำเนินการในส่วนนี้ กรุณาเลือกอย่างใดอย่างหนึ่ง ลงชื่อเข้าใช้ | ลงทะเบียน

รายละเอียดเครดิต

ข้อความล้วน|อุปกรณ์พกพา|ประวัติการแบน|G2GNet.com  

GMT+7, 2024-11-27 21:24 , Processed in 0.110457 second(s), 5 queries , File On.

Powered by Discuz! X3.4, Rev.62

Copyright © 2001-2020 Tencent Cloud.

ตอบกระทู้ ขึ้นไปด้านบน ไปที่หน้ารายการกระทู้