2016-12-09 3 views
0

Ich verwende derzeit das Newtonsoft-Framework, um meine Produktkategorien-Datensatz in JSON-Daten zu serialisieren.Hinzufügen eines Arrays innerhalb von JSON aus .net Dataset

Die aktuelle Art, wie ich es tun, ist:

Public Function Category() As String 
     Try 
      Dim ds As DataSet = getDataSetFromPTLSAGE("website.CategoryList", db_conx("xxxxxxxxxxxx")) 
      Dim string_ As String 
      string_ = JsonConvert.SerializeObject(ds, Newtonsoft.Json.Formatting.Indented) 
      Return string_ 
     Catch ex As Exception 
      Return ex.ToString 
     End Try 

    End Function 

Das funktioniert gut und liefert Ergebnisse wie folgt aus:

{ 
    "Table": [ 
    { 
     "Id": "21", 
     "Name": "Accessories", 
     "URLFriendlyName": "accessories" 
    }, 
    { 
     "Id": "06", 
     "Name": "Baby", 
     "URLFriendlyName": "baby" 
    }, 
    { 
     "Id": "01", 
     "Name": "Bath & Shower", 
     "URLFriendlyName": "bath-shower" 
    }, 
    { 
     "Id": "18", 
     "Name": "Books & Stationery", 
     "URLFriendlyName": "books-stationery" 
    } 
    ] 
} 

was Nun möchte ich tun ist, mag die Unterkategorien in die json einfügen Ausgabe. Ich kann die Unterkategorie-Daten leicht genug erhalten und sie in ein Dataset einfügen, aber was ist die beste Methode, um ein Array von Objekten innerhalb des aktuellen Objekts zu haben. Die Ausgabe sollte wie folgt aussehen:

{ 
    "Table": [ 
    { 
     "Id": "21", 
     "Name": "Accessories", 
     "URLFriendlyName": "accessories", 
     "SubCategory": [ 
        { 
          "Id":"01", 
          "Name":"Travel", 
          "URLFriendlyName":"travel" 
        }, 
        { 
          "Id":"02", 
          "Name":"Umbrella", 
          "URLFriendlyName":"umbrella" 
        } 
        ] 
    } 
    ] 
} 

Alle Gedanken und Vorschläge, wie ich eine verknüpfte Datentabelle innerhalb eines Datensatzes serialise würde?

+1

Eine Möglichkeit, dies zu tun wäre, eine Klasse Tabelle zu erstellen, die eine Liste enthält. Konvertieren Sie Ihr Dataset in diese Klasse und serialisieren Sie diese Klasse in json. – Carra

Antwort

1

Sie können es wie folgt tun:

  • Erstellen Sie eine Klasse Tabelle, die ID, Name, urlfriendlyname und eine Liste Eigenschaften enthält.
  • Konvertieren Sie Ihre Datenmenge in dieses Tabellenobjekt.
  • Serialisieren Sie dieses Tabellenobjekt nach json.
2

Es war die Antwort von Carra, die mich dazu führen, aber falls jemand will den endgültigen Code sehen:

Public Class Class1 
    Public Function Category() As String 
     Try 
      Dim _categorylist As New CategoryList 
      _categorylist.Categories = New List(Of Categories) 
      Dim ds As DataSet = getDataSetFromSQL("website.CategoryList", db_conx("xxxxxxxx")) 
      If ds.Tables(0).Rows.Count > 0 Then 
       For i = 0 To ds.Tables(0).Rows.Count - 1 
        Dim _category As New Categories 
        Dim id As String = ds.Tables(0).Rows(i)("Id").ToString.Trim 
        _category.Id = id 
        _category.Name = ds.Tables(0).Rows(i)("Name").ToString.Trim 
        _category.URLFriendlyName = ds.Tables(0).Rows(i)("URLFriendlyName").ToString.Trim 
        _category.SubCategories = New List(Of SubCategories) 
        Dim subDs As DataSet = getDataSetFromSQL("website.SubCategoryList", db_conx("xxxxxxxx"), "@id", id) 
        If subDs.Tables(0).Rows.Count > 0 Then 
         For x = 0 To subDs.Tables(0).Rows.Count - 1 
          Dim _subCategory As New SubCategories 
          _subCategory.Id = subDs.Tables(0).Rows(x)("Id").ToString.Trim 
          _subCategory.Name = subDs.Tables(0).Rows(x)("Name").ToString.Trim 
          _subCategory.URLFriendlyName = subDs.Tables(0).Rows(x)("URLFriendlyName").ToString.Trim 
          _category.SubCategories.Add(_subCategory) 
         Next x 
        End If 
        _categorylist.Categories.Add(_category) 
       Next 
      End If 
      Return JsonConvert.SerializeObject(_categorylist, Newtonsoft.Json.Formatting.Indented) 
     Catch ex As Exception 
      Return ex.ToString 
     End Try 
    End Function 
End Class 

Public Class CategoryList 
    Public Property Categories() As List(Of Categories) 
End Class 

Public Class Categories 
    Public Property Id() As String 
    Public Property Name() As String 
    Public Property URLFriendlyName() As String 
    Public Property SubCategories As List(Of SubCategories) 
End Class 

Public Class SubCategories 
    Public Property Id() As String 
    Public Property Name() As String 
    Public Property URLFriendlyName() As String 
End Class 

Bitte beachten Sie, dass die Funktion getDataSetFromSql nur eine Hilfsfunktion, die ich geschaffen habe zu helfen, Ich erhalte schnell gespeicherte Prozedurdatensätze von SQL

+0

Froh ich könnte helfen :) – Carra

Verwandte Themen