Vb.net 如何正确转换json中的数组?

Vb.net 如何正确转换json中的数组?,vb.net,Vb.net,我对vb.net有点生疏,我需要您的帮助来编码: {"monday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"tuesday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"1

我对vb.net有点生疏,我需要您的帮助来编码:

{"monday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"tuesday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"wednesday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"thursday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"friday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"saturday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]},"sunday":{"start":"09:00","end":"18:00","breaks":[{"start":"11:20","end":"11:30"},{"start":"14:30","end":"15:00"}]}}
在vb.net的json格式中,您如何看到这个字符串已经用json编码,但我想知道如何创建一个数组或类似的东西来存储休息时间的天数。基本上:

"monday":{
"start":"09:00",
"end":"18:00",
"breaks":[
{
"start":"11:20",
"end":"11:30"
},
{
"start":"14:30",
"end":"15:00"
}
]
},
"tuesday":{
"start":"09:00",
"end":"18:00",
"breaks":[
{
"start":"11:20",
"end":"11:30"
},
{
"start":"14:30",
"end":"15:00"
}
]
},
我想创建此类内容的最佳方法应该是使用字典。
有人能给出一个正确而快速的方法来得到这个结果吗

更新:

workWeek.saturday.starttime = User.saturday_start.Value
workWeek.saturday.endtime = User.saturday_end.Value
如何将名为
saturday\u start
saturday\u end
的日期时间选择器中正确的开始和结束日期传递给
saturday
工作日的类变量。
现在,根据您的提示,我想知道在输入这些数据之后,如何用json编码

更新#2-添加中断

 For Each row As DataGridViewRow In User.break_view.Rows

                If Not row.IsNewRow Then

                    Console.WriteLine(row.Cells(0).Value.ToString)

                    If row.Cells(0).Value.ToString = "Monday" Then

                        workWeek.monday.breaks.starttime = row.Cells(1).Value.ToString ' <- This is also wrong I guess, it's not this the way for add the break to a specific day?

                    End If

                   ... other day condition ..

                End If

            Next
在User.break\u view.Rows中作为DataGridViewRow的每一行的

如果不是row.IsNewRow,则
Console.WriteLine(row.Cells(0.Value.ToString)
如果row.Cells(0).Value.ToString=“星期一”,则

workWeek.monday.breaks.starttime=row.Cells(1).Value.ToString'
end
在VB中是非法的属性名称,
break
可能会阻塞C。因此,使用JSON.NET可以轻松更改属性名称:

Public Class WorkDay
    <JsonProperty("start")>
    Public Property starttime As String
    <JsonProperty("end")>
    Public Property endtime As String
    Public Property breaks As New List(Of Break)
End Class

Public Class Break
    <JsonProperty("start")>
    Public Property starttime As String
    <JsonProperty("end")>
    Public Property endtime As String
End Class
要迭代:

For Each kvp As KeyValuePair(Of String, WorkDay) In result
    Console.WriteLine("Day: {0}  start: {1}  end: {2}",
                      kvp.Key, kvp.Value.starttime, kvp.Value.endtime)
Next
输出:

日期:星期一开始:09:00结束:18:00
日期:星期二开始:09:00结束:18:00
日期:星期三开始:09:00结束:18:00

等等,它们都是一样的


我实际上还想创建一个有整整一周时间的对象
如果您想要一个平面对象,请添加以下类:

Public Class WorkWeek
    Public Property monday As WorkDay
    Public Property tuesday As WorkDay
    Public Property wednesday As WorkDay
    Public Property thursday As WorkDay
    Public Property friday As WorkDay
    Public Property saturday As WorkDay
    Public Property sunday As WorkDay

    ' a ctor to initialize the workday objects when
    ' starting from VB:
    Public Sub New
        monday = New WorkDay
        tuesday = New WorkDay
        ' etc...
    End Sub
End Class

' deserialize:
Dim myWkWeek = JsonConvert.DeserializeObject(Of WorkWeek)(jstr)
这对我来说似乎有点多余,但根据它是什么以及如何使用,可能会更简单


要从VB对象创建json,只需序列化它:

Dim jstr = JsonConvert.SerializeObject(myWkWeek)

Json不是一种格式。它是序列化的对象数据——也就是说,它是许多类属性值的文本表示法,因此布局或结果格式是序列化的类对象的格式。是创建表示该结构的对象的点吗?反序列化json还是什么?我实际上还想创建一个拥有整个星期的对象。我的目标是实现问题中所示的结果。但是
编码帮助:
-json已经编码了!我知道,当用户填写一些信息时,我用PHP对这个字符串进行了编码,在本例中是提供者的工作计划。问题是我不知道如何在vb.net中获得这个结构。我们的目标是采用相同的结构在客户端和web应用程序之间执行db同步。您是否在所有7天内从答案编辑中添加了
子项新内容?我回滚了您的编辑-您不需要NRE ref,否则它将作为副本关闭。如果您希望使用pastebin获得相关代码,那么可以使用pastebin,但是如何填充jstr呢?我的意思是,我如何添加例如周一开始和结束时间,以及添加倍数休息?感谢您的支持。
WorkDay
类型(对象)有一个
中断
数组,这些开始/停止位于该数组中。如果要添加/编辑
休息时间
请将Workday更改为:
公共属性休息时间列表(休息时间)
。从
列表
中添加/删除要比老式的数组容易得多我几乎总是用
列表
来代替数组,但你的问题特别要求数组。“填充jstr”将序列化一个字典或WorkWeek对象(这就是我要问的-不清楚您是在尝试读取json还是从VB创建json)。这不是问题,我在VB.net中要求一个数组,因为我认为如果这对您来说是一个问题,会更容易,请不要犹豫使用列表。另一个问题是,我不明白如何为某一天添加开始和结束。我使用了monday.start=“”,但是我看不到任何周一变量
myWkWeek.monday.starttime=…
,或者如果您使用的是字典方法:
result(“monday”)。starttime=…
在VB中是
endtime
,在json中是
“end”
,原因如下所述
Dim jstr = JsonConvert.SerializeObject(myWkWeek)