2015-10-19 84 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

我会检查这个。谢谢你的答案。 –