2015-10-19 132 views
0

NET和IM試圖建立這樣序列化JSON嵌套與Json.net(VB.NET)

{ 
"data": [{ 
"title": "blah", 
"youtube_videos": { 
"video_identifier": [ 
      { 
     "video_identifier": "id1" 
      }, 
     "video_identifier": "id2"  
      }] 

N 「新聞」 與N 「視頻」 相關

一個JSON輸出

這是到目前爲止我的代碼:

Class News 
    Public Property title() As String 
     Get 
      Return _title 
     End Get 
     Set(value As String) 
      _title = value 
     End Set 
    End Property 
    Private _title As String 


    Public Property id() As String 
     Get 
      Return _sId 
     End Get 
     Set(value As String) 
      _sId = value 
     End Set 
    End Property 

    Private _youtube_videos As YoutubeVideos = New YoutubeVideos() 
    Public Property youtube_videos As YoutubeVideos 
     Get 
      Return _youtube_videos 
     End Get 
     Set(ByVal value As YoutubeVideos) 
      _youtube_videos = value 
     End Set 
    End Property 
Ënd Class 

Public Class YoutubeVideos 
    Private _video_identifier As String 
    Public Property video_identifier() As String 
     Get 
      Return _video_identifier 
     End Get 
     Set(ByVal value As String) 
      _video_identifier = value 
     End Set 
    End Property 


End Class 

...

Private Function getJSON(ByVal sJSON As String) As String 

Dim objNews As New List(Of Noticia) 
Dim objVideos As New List(Of YoutubeVideos) 

Dim objItem As New News 
objItem.title = "blah blah" 

objNews .Add(objItem) 

??? 

Return Newtonsoft.Json.JsonConvert.SerializeObject(New With {Key .data = objNews}) 

我不知道如何cointinue到的所有視頻添加到每個新

任何幫助將apreciated。謝謝。

回答

0

有兩件事情在你的解決方案(忽略在解決方案中的錯別字)丟失: - 該youtube_videos屬性需要是一個數組或列表 - 該陣列可以是對象的簡單數組(JSON.NET會序列化你)

試試這個,

Private Function getJSON(sJSON As String) As String 
    Dim objNews = New List(Of News)() 
    Dim news = New News() 
    news.id = "" 
    news.title = "blah" 
    Dim lst = New List(Of Object)() 
    lst.Add(New With {.video_identifier = "id1"}) 
    lst.Add(New With {.video_identifier = "id2"}) 
    news.video_identifier = lst.ToArray() 
    objNews.Add(news) 
    Return Newtonsoft.Json.JsonConvert.SerializeObject(New With {.data = objNews}) 
End Function 

Class News 

    Public Property title As String 
     Get 
      Return _title 
     End Get 

     Set 
      _title = value 
     End Set 
    End Property 

    Private _title As String 

    Private _sId As String 

    Public Property id As String 
     Get 
      Return _sId 
     End Get 

     Set 
      _sId = value 
     End Set 
    End Property 

    Private _youtube_videos As Object() = New List(Of Object)().ToArray() 

    Public Property video_identifier As Object() 
     Get 
      Return _youtube_videos 
     End Get 

     Set 
      _youtube_videos = value 
     End Set 
    End Property 
End Class 

Public Class YoutubeVideos 

    Private _video_identifier As String 

    Public Property video_identifier As String 
     Get 
      Return _video_identifier 
     End Get 

     Set 
      _video_identifier = value 
     End Set 
    End Property 
End Class 
+0

感謝您的回答,完美的作品:) –

0

從唐Jayamanne答案已經注意到,您需要使用名單的事實。

您還需要使用適當的模型(類的結構)來製作所需的JSON。例如,你需要引入新的類。

此外,您還需要使用JsonProperty屬性來控制用於生成JSON的名稱。

試試這個:

Class News 
    <JsonProperty(propertyName:="title")> 
    Public Property Title As String 
    <JsonProperty(propertyName:="youtube_videos")> 
    Public Property YoutubeVideos As YoutubeVideos = YoutubeVideos 
End Class 

Class NewsList 
    <JsonProperty(propertyName:="data")> 
    Public Items As List(Of News) = New List(Of News)() 
End Class 


Public Class YoutubeVideos 
    <JsonProperty(propertyName:="video_identifier")> 
    Public Property Items As List(Of YoutubeVideo) = New List(Of YoutubeVideo) 
End Class 

Public Class YoutubeVideo 
    <JsonProperty(propertyName:="video_identifier")> 
    Public Property VideoIdentifier As String 
End Class 

Sub Main() 

    Dim newsItem = New News() 
    newsItem.Title = "blah" 

    Dim video1 = New YoutubeVideo() 
    video1.VideoIdentifier = "id1" 
    newsItem.YoutubeVideos.Items.Add(video1) 

    Dim video2 = New YoutubeVideo() 
    video2.VideoIdentifier = "id2" 
    newsItem.YoutubeVideos.Items.Add(video2) 

    Dim newsList = New NewsList() 
    newsList.Items.Add(newsItem) 
    Dim result = JsonConvert.SerializeObject(newsList) 

End Sub 
+0

我會檢查這個。謝謝你的答案。 –