Click here to Skip to main content
15,890,527 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I am new to Json and I am stuck at creating a JSon data file for an Ext.Net Treepanel.

Here is the data which is I manually type them in and it works for me. And I want to generate a similar data format from a data table in VB.Net.
{
  "partcode": "",
  "threadid": "",
  "description": "",
  "specification": "",
  "parentId": null,
  "leaf": false,
  "children": [
    {
      "partcode": "609",
      "threadid": "",
      "description": "This is code 609",
      "specification": "Code 609 Spec",
      "parentId": "root",
      "leaf": false,
      "children": [
        {
          "partcode": "609B",
          "threadid": "",
          "description": "This is code 609B",
          "specification": "Code 609B Spec",
          "parentId": "609",
          "leaf": false,
          "children": [
            {
              "partcode": "609BLevel2",
              "threadid": "",
              "description": "This is code 609B Level 2",
              "specification": "Code 609BLevel2 Spec",
              "parentId": "609B",
              "leaf": false,
              "children": [
                {
                  "partcode": "609BLevel3",
                  "threadid": "",
                  "description": "This is code 609BLevel3",
                  "specification": "Code 609BLevel3 Spec",
                  "parentId": "609BLevel2",
                  "leaf": true
                }
              ]
            }
          ]
        },
        {
          "partcode": "B609/3",
          "threadid": "",
          "description": "This is code B609/3",
          "specification": "Code B609/3 Spec",
          "parentId": "609",
          "leaf": false,
          "children": [
            {
              "children": [
                {
                  "partcode": "B609/3 Level2",
                  "threadid": "",
                  "description": "This is code B609/3 Level 2",
                  "specification": "Code B609/3 Spec",
                  "parentId": "B609/3",
                  "leaf": false,
                  "children": [
                    {
                      "partcode": "B609/3 Level3",
                      "threadid": "",
                      "description": "This is code 609BLevel3",
                      "specification": "Code B609/3 Level3 Spec",
                      "parentId": "B609/3 Level2",
                      "leaf": true
                    }
                  ]
                }
              ]
            }
          ]
        }
      ]
    }
  ]
}


In my data table, 
NoIdx partcode     parent     description             specification
0     609          0_         This is code 609        Code 609 Spec
1     609B         609        This is code 609B       Code 609B Spec
2     609BLevel2   609B       This is code 609BLevel2 Code 609BLevel2 Spec
3     609BLevel3   609BLevel2 This is code 609BLevel3 Code 609BLevel3 Spec
1     B609/3       609        blah blah blah
2     B609/3Level2 B609/3     blah blah blah
3     B609/3Level3 B609/3Level2 blah blah...   


What I have tried:

Here below was what I attempted to do but it is not working. Can anyone help?

Dim dt As New DataTable
        'dt = oSQLClass.GetSQLTable("SELECT * FROM get_BomTree ('609', '609', 1 )")

        Try
            Dim dc As New myDataConnection
            Dim cn As New SqlClient.SqlConnection(dc.ConStringForSQLCommand)
            cn.Open()

            Dim sa As New SqlClient.SqlDataAdapter("SELECT * FROM get_BomTree ('609', '609', 1 )", cn)

            cn.Close() 'connection close here , that is disconnected from data source

            sa.Fill(dt)

        Catch ex As Exception

        End Try

        If dt.Rows.Count = 0 Then
            Exit Sub
        End If

     Using writer As Newtonsoft.Json.JsonWriter = New JsonTextWriter(sw)
            writer.Formatting = Formatting.Indented

            ''This is a root mark up
            ''-----------------------
            writer.WriteStartObject()
            writer.WritePropertyName("partcode")
            writer.WriteValue("")
            writer.WritePropertyName("description")
            writer.WriteValue("")
            writer.WritePropertyName("specification")
            writer.WriteValue("")
            writer.WritePropertyName("parentId")
            writer.WriteValue("root")
            writer.WritePropertyName("leaf")
            writer.WriteValue(False)

            Dim r As DataRow
            Dim rNext As DataRow = Nothing

            ''
            For i As Int16 = 0 To dt.Rows.Count - 1
                r = dt.Rows(i)
                If i + 1 <= dt.Rows.Count Then
                    rNext = dt.Rows(i + 1)
                Else
                    rNext = Nothing
                End If

                If r("NoIdx") = 0 Then
                    ''This is a FATHER
                    ''-----------------------
                    writer.WritePropertyName("children")
                    writer.WriteStartArray()
                    writer.WriteStartObject()
                    writer.WritePropertyName("partcode")
                    writer.WriteValue(Trim(r("partcode")))
                    writer.WritePropertyName("description")
                    writer.WriteValue(Trim(r("description")))
                    writer.WritePropertyName("specification")
                    writer.WriteValue(Trim(r("specification")))
                    writer.WritePropertyName("parentId")
                    writer.WriteValue(Trim(r("parent")))
                    writer.WritePropertyName("leaf")
                    writer.WriteValue(False) '' if have child then leaf=false
                    writer.WritePropertyName("children")
                    writer.WriteStartArray()
                Else
                    writer.WriteStartObject()
                    writer.WritePropertyName("partcode")
                    writer.WriteValue(Trim(r("partcode")))
                    writer.WritePropertyName("description")
                    writer.WriteValue(Trim(r("description")))
                    writer.WritePropertyName("specification")
                    writer.WriteValue(Trim(r("specification")))
                    writer.WritePropertyName("parentId")
                    writer.WriteValue(Trim(r("parent")))
                    writer.WritePropertyName("leaf")

                    If rNext IsNot Nothing Then
                        ''it has sub level
                        If CInt(rNext("NoIdx")) > r("NoIdx") Then
                            writer.WriteValue(False) '' continue add node in same level leaf=false
                            writer.WritePropertyName("children")
                            writer.WriteStartArray()
                        Else
                            If CInt(rNext("NoIdx")) = r("NoIdx") Then
                                writer.WriteValue(True) '' continue add node in same level leaf=false
                                writer.WriteEndObject()
                            Else
                                ''no more sub level
                                writer.WriteValue(True) '' cut off and add new level leaf= true

                                writer.WriteEndConstructor()

                            End If
                        End If
                    End If
                End If

            Next

            writer.WriteEnd()
            writer.WriteEndObject()
        End Using

     Dim file As System.IO.StreamWriter
        file = My.Computer.FileSystem.OpenTextFileWriter("C:\Users\User\Documents\File\TestData.Json", False)
        file.WriteLine(sb.ToString)
        file.Close()
Posted
Updated 11-Jan-17 15:09pm

1 solution

Can anyone help?
Thanks in advance.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900