首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >VB.NET 解析 JSON 前所未有的简捷[JSON 快速转.NET 实体类]

VB.NET 解析 JSON 前所未有的简捷[JSON 快速转.NET 实体类]

作者头像
办公魔盒
发布2021-10-20 17:01:14
发布2021-10-20 17:01:14
4.5K0
举报
文章被收录于专栏:办公魔盒办公魔盒

 还在为一长串 JSON 的字符串取数据而烦恼吗?还在为不会解析 JSON 数据而烦恼吗?还在为写多层大数据 JSON 实体类而烦恼吗?今天,你有幸看到这篇文章以上的问题都可以迎刃而解;

❝一、首先,出场的是我们的大杀器"JSON 快速转.NET 实体类"的小工具; ❞

  • 1.1. 工具描述工具参考 Github 上的开源项目,忘记是哪位大神了

  本工具可以很好的把 JSON 字符串或者 JSON 字符串对象,快速转换成.NET 的实体类(VB.NET,Csharp),并支持一键拖拽加载 TXT 或者 JSON 文件中的数据,工具还支持.NET 实体类的自动内容注释,JSON 特性描述,JSON 实体类根类设置,实体类类型后缀修改等;支持自定义递归 JSON 的层数,再也不怕多层 JSON 的不好理解,该工具还支持 JSON 字符串的转义清洗和格式化没法字符串;

  • 1.2. 诸君且看视频效果
  • 1.3. 实体类工具转换源代码购买(使用源码可以自定义更多功能方便自己个性化的数据实体类转换)
  • 1.4. 实体类转换工具下载使用
代码语言:javascript
复制

链接:https://pan.baidu.com/s/158EMsyFQI5sGbHSb8MyRAQ
提取码:vbee

❝二、使用转换器转换后的.NET 实体类结合 Newtonsoft.Json 对 JSON 字符串或 JSON 对象字符串进行序列化与反序列化 ❞

  • 2.1. 依然使用上一篇的 JSON 字符串对象(JSON 是什么就不过多去扯了,上两篇已经扯过了)
代码语言:javascript
复制


{
    "状态": 0,
    "信息": "查询成功",
    "结果": [{
        "姓名": "李四",
        "年龄": 20,
        "身高": 175,
        "体重": "70KG",
        "爱好": "瞟美女",
        "喜欢美女类型": ["萝莉", "少妇"],
        "喜欢的美女": [{
            "姓名": "玲玲",
            "身高": 165,
            "体重": "48KG"
        }, {
            "姓名": "婷婷",
            "身高": 170,
            "体重": "45KG"
        }]

    }, {
        "姓名": "王五",
        "年龄": 22,
        "身高": 185,
        "体重": "60KG",
        "爱好": "看隔壁美女",
        "喜欢美女类型": ["御姐", "少妇"],
        "喜欢的美女": [{
            "姓名": "花花",
            "身高": 165,
            "体重": "48KG"
        }, {
            "姓名": "佳佳",
            "身高": 170,
            "体重": "45KG"
        }]
    }, {
        "姓名": "张三",
        "年龄": 18,
        "身高": 165,
        "体重": "66KG",
        "爱好": "打球,瞟美女",
        "喜欢美女类型": ["御姐", "少妇", "萝莉"],
        "喜欢的美女": [{
            "姓名": "咔咔",
            "身高": 165,
            "体重": "48KG"
        }, {
            "姓名": "蜜蜜",
            "身高": 170,
            "体重": "45KG"
        }]
    }]
}

  • 2.2. JSON 字符串
代码语言:javascript
复制

"{
    \"状态\": 0,
    \"信息\": \"查询成功\",
    \"结果\": [{
        \"姓名\": \"李四\",
        \"年龄\": 20,
        \"身高\": 175,
        \"体重\": \"70KG\",
        \"爱好\": \"瞟美女\",
        \"喜欢的美女\": [{
            \"姓名\": \"玲玲\",
            \"身高\": 165,
            \"体重\": \"48KG\"
        }, {
            \"姓名\": \"婷婷\",
            \"身高\": 170,
            \"体重\": \"45KG\"
        }],
        \"喜欢美女类型\": [\"萝莉\", \"少妇\"]
    }, {
        \"姓名\": \"王五\",
        \"年龄\": 22,
        \"身高\": 185,
        \"体重\": \"60KG\",
        \"爱好\": \"看隔壁美女\",
        \"喜欢美女类型\": [\"御姐\", \"少妇\"],
        \"喜欢的美女\": [{
            \"姓名\": \"花花\",
            \"身高\": 165,
            \"体重\": \"48KG\"
        }, {
            \"姓名\": \"佳佳\",
            \"身高\": 170,
            \"体重\": \"45KG\"
        }]
    }, {
        \"姓名\": \"张三\",
        \"年龄\": 18,
        \"身高\": 165,
        \"体重\": \"66KG\",
        \"爱好\": \"打球,瞟美女\",
        \"喜欢美女类型\": [\"御姐\", \"少妇\", \"萝莉\"],
        \"喜欢的美女\": [{
            \"姓名\": \"咔咔\",
            \"身高\": 165,
            \"体重\": \"48KG\"
        }, {
            \"姓名\": \"蜜蜜\",
            \"身高\": 170,
            \"体重\": \"45KG\"
        }]
    }]
}"

  • 2.3. 接下来反序列化的是 JSON 字符串对象成实体类对象(JSON 字符串一样的操作只是把转义符去掉即可,不过多叙说)
  • 2.3.1. 首先,使用我们的大杀器把 JSON 字符串转换成 VB .NET 实体类(玩 C#自己搞去)
代码语言:javascript
复制

Public Class JsonObjectRoot

		Public Property 状态 As Integer
		Public Property 信息 As String
		Public Property 结果 As List(Of 结果Type)

	Public Class 结果Type

		Public Property 姓名 As String
		Public Property 年龄 As Integer
		Public Property 身高 As Integer
		Public Property 体重 As String
		Public Property 爱好 As String
		Public Property 喜欢美女类型 As List(Of String)
		Public Property 喜欢的美女 As List(Of 喜欢的美女Type)

	End Class

	Public Class 喜欢的美女Type

		Public Property 姓名 As String
		Public Property 身高 As Integer
		Public Property 体重 As String

	End Class

End Class


  • 2.3.2. 然后,通过 Newtonsoft.Json 进行反序列化成实体类对象,代码如下;
代码语言:javascript
复制
    ''就一句话的事
    Dim fobj As JsonObjectRoot = JsonConvert.DeserializeObject(Of JsonObjectRoot)(RichTextBox1.Text)

    Debug.WriteLine(fobj.状态)
    Debug.WriteLine(fobj.信息)

    Dim 结果 As List(Of JsonObjectRoot.结果Type) = fobj.结果

    For Each oj As JsonObjectRoot.结果Type In 结果

      Debug.WriteLine($"基本信息:{oj.姓名}->{oj.年龄}->{oj.爱好}->{oj.体重}->{oj.身高}")

      For Each lx As String In oj.喜欢美女类型
        Debug.WriteLine($"{oj.姓名}喜欢的类型:{lx}")
      Next

      For Each mm As JsonObjectRoot.喜欢的美女Type In oj.喜欢的美女
        Debug.WriteLine($"{oj.姓名}喜欢的美女MM基本信息:{mm.姓名}->{mm.体重}->{mm.身高}")
      Next

      Debug.WriteLine(vbCrLf)
    Next


❝输出的结果 ❞

代码语言:javascript
复制

0
查询成功
基本信息:李四->20->瞟美女->70KG->175
李四喜欢的类型:萝莉
李四喜欢的类型:少妇
李四喜欢的美女MM基本信息:玲玲->48KG->165
李四喜欢的美女MM基本信息:婷婷->45KG->170


基本信息:王五->22->看隔壁美女->60KG->185
王五喜欢的类型:御姐
王五喜欢的类型:少妇
王五喜欢的美女MM基本信息:花花->48KG->165
王五喜欢的美女MM基本信息:佳佳->45KG->170


基本信息:张三->18->打球,瞟美女->66KG->165
张三喜欢的类型:御姐
张三喜欢的类型:少妇
张三喜欢的类型:萝莉
张三喜欢的美女MM基本信息:咔咔->48KG->165
张三喜欢的美女MM基本信息:蜜蜜->45KG->170



  • 2.3.3. 完整反序列化代码
代码语言:javascript
复制

Imports Newtonsoft.Json

Public Class Formx
  Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

    Dim fobj As JsonObjectRoot = JsonConvert.DeserializeObject(Of JsonObjectRoot)(RichTextBox1.Text)

    Debug.WriteLine(fobj.状态)
    Debug.WriteLine(fobj.信息)

    Dim 结果 As List(Of JsonObjectRoot.结果Type) = fobj.结果

    For Each oj As JsonObjectRoot.结果Type In 结果

      Debug.WriteLine($"基本信息:{oj.姓名}->{oj.年龄}->{oj.爱好}->{oj.体重}->{oj.身高}")

      For Each lx As String In oj.喜欢美女类型
        Debug.WriteLine($"{oj.姓名}喜欢的类型:{lx}")
      Next

      For Each mm As JsonObjectRoot.喜欢的美女Type In oj.喜欢的美女
        Debug.WriteLine($"{oj.姓名}喜欢的美女MM基本信息:{mm.姓名}->{mm.体重}->{mm.身高}")
      Next

      Debug.WriteLine(vbCrLf)
    Next

  End Sub

End Class

Public Class JsonObjectRoot

  Public Property 状态 As Integer
  Public Property 信息 As String
  Public Property 结果 As List(Of 结果Type)

  Public Class 结果Type

    Public Property 姓名 As String
    Public Property 年龄 As Integer
    Public Property 身高 As Integer
    Public Property 体重 As String
    Public Property 爱好 As String
    Public Property 喜欢美女类型 As List(Of String)
    Public Property 喜欢的美女 As List(Of 喜欢的美女Type)

  End Class

  Public Class 喜欢的美女Type

    Public Property 姓名 As String
    Public Property 身高 As Integer
    Public Property 体重 As String

  End Class

End Class


  • 2.4. 最后把序列化实体类对象成 JSON 字符串
  • 2.4.1. 依然使用神器生成的实体类(不再重复贴出)
  • 2.4.2. 把对象序列化成 JSON 字符串是一句话的事

且看具体代码(所见即所得)

代码语言:javascript
复制

  Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

    Dim newxx As New JsonObjectRoot With {
      .状态 = 0,
      .信息 = "对象序列化成实体类",
      .结果 = New List(Of JsonObjectRoot.结果Type) From {
        New JsonObjectRoot.结果Type With {
          .姓名 = "A男",
          .体重 = "70kg",
          .年龄 = 50,
          .爱好 = "无",
          .身高 = 160,
          .喜欢美女类型 = New List(Of String) From {
           "少妇",
           "大妈"
          },
          .喜欢的美女 = New List(Of JsonObjectRoot.喜欢的美女Type) From {
            New JsonObjectRoot.喜欢的美女Type With {
              .姓名 = "A女",
              .体重 = "80KG",
              .身高 = 150
            }
          }
        },
        New JsonObjectRoot.结果Type With {
          .姓名 = "B男",
          .体重 = "80kg",
          .年龄 = 45,
          .爱好 = "DFJ",
          .身高 = 170,
          .喜欢美女类型 = New List(Of String) From {
           "少妇",
           "萝莉"
          },
          .喜欢的美女 = New List(Of JsonObjectRoot.喜欢的美女Type) From {
            New JsonObjectRoot.喜欢的美女Type With {
              .姓名 = "B女",
              .体重 = "50KG",
              .身高 = 160
            }
          }
        }
      }
    }

    Dim FSTR As String = JsonConvert.SerializeObject(newxx)


    Debug.WriteLine(FormatJsonString(FSTR))

  End Sub

  ''' <summary>
  ''' 格式化JSON
  ''' </summary>
  ''' <param name="JsonStr"></param>
  ''' <returns></returns>
  Public Function FormatJsonString(JsonStr As String) As String
    Try
      Dim Jser As New JsonSerializer
      Dim Trd As TextReader = New StringReader(JsonStr)
      Dim Jtrd As New JsonTextReader(Trd)
      Dim jobj As Object = Jser.Deserialize(Jtrd)
      If jobj IsNot Nothing Then
        Dim Sw As New StringWriter
        Dim Jtw As New JsonTextWriter(Sw) With {
        .Formatting = Formatting.Indented,
        .Indentation = 4,
        .IndentChar = " "c
      }
        Jser.Serialize(Jtw, jobj)
        Return Sw.ToString
      Else
        Return JsonStr
      End If
    Catch ex As Exception
      Return JsonStr
    End Try
  End Function

❝输出的结果 ❞

代码语言:javascript
复制

{
    "状态": 0,
    "信息": "对象序列化成实体类",
    "结果": [
        {
            "姓名": "A男",
            "年龄": 50,
            "身高": 160,
            "体重": "70kg",
            "爱好": "无",
            "喜欢美女类型": [
                "少妇",
                "大妈"
            ],
            "喜欢的美女": [
                {
                    "姓名": "A女",
                    "身高": 150,
                    "体重": "80KG"
                }
            ]
        },
        {
            "姓名": "B男",
            "年龄": 45,
            "身高": 170,
            "体重": "80kg",
            "爱好": "DFJ",
            "喜欢美女类型": [
                "少妇",
                "萝莉"
            ],
            "喜欢的美女": [
                {
                    "姓名": "B女",
                    "身高": 160,
                    "体重": "50KG"
                }
            ]
        }
    ]
}

❝三、 好啦,今天就演示到这里吧! ❞

具体 JSON 序列化与反序列化测试项目见以下链接

代码语言:javascript
复制

链接:https://pan.baidu.com/s/1Y-MxtXCTutxKeMcKa0-03A
提取码:vbee

❝四、联系方式 ❞

代码语言:javascript
复制
微信:vbee_club
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-08,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档