2016-12-09 5 views
0

現在、Newtonsoftフレームワークを使用して、製品カテゴリのデータセットをjsonデータにシリアル化しています。.netデータセットからJSON内に配列を追加する

私はそれを行う現在の方法は、次のとおりです。

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 

これがうまく機能し、このような結果生成:今、私がやりたいものを

{ 
    "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" 
    } 
    ] 
} 

をJSONにサブカテゴリーを挿入しています出力。サブカテゴリのデータを簡単に取得してデータセットに入れることはできますが、現在のオブジェクトの内部にオブジェクトの配列を格納する最良の方法は何ですか。私は、データセット内のリンクされたDataTableをシリアル化する方法を

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

任意の考えや提案:出力は次のようになりますか?

+1

List を含むクラスTableを作成する方法の1つは、データセットをこのクラスに変換し、このクラスをjsonにシリアル化します。 – Carra

答えて

1

あなたはこのようにそれを行うことができます。

  • ID、名前、urlfriendlynameとリストのプロパティを含むクラスの表を作成します。
  • データセットをこのテーブルオブジェクトに変換します。
  • このテーブルオブジェクトをjsonにシリアル化します。
2

それはこれに私を導くCARRAの答えだったが、場合には、誰もが、最終的なコード見たい:

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 

を機能getDataSetFromSqlは私が助けるために作成したばかりのヘルパー関数であることに注意してください私はすぐにSQLからストアドプロシージャデータセットを取得します

+0

嬉しいです:) – Carra

関連する問題