【问题标题】:Serializing nested JSON with Json.net (VB.NET)使用 Json.net (VB.NET) 序列化嵌套 JSON
【发布时间】:2016-01-17 17:34:19
【问题描述】:

NET,我正在尝试创建这样的 JSON 输出

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

等等

n 个“新闻”与 n 个关联的“视频”

到目前为止,这是我的代码:

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})

我不知道如何继续将所有视频添加到每个新视频中

我们将不胜感激。谢谢你。

【问题讨论】:

    标签: json vb.net serialization json.net


    【解决方案1】:

    您的解决方案中缺少两件事(忽略解决方案中的拼写错误): - 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
    

    【讨论】:

      【解决方案2】:

      Don 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
      

      【讨论】:

      • 我会检查这个。谢谢你的回答。
      猜你喜欢
      • 2023-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-29
      • 2014-02-19
      • 2011-09-18
      • 2020-02-25
      • 1970-01-01
      相关资源
      最近更新 更多