无法在Class属性中转换String

时间:2015-12-13 18:47:19

标签: vb.net

这是继续of this question的意义。但为了准确,我解释我想做什么。我开发了一个允许用户管理工作日的Web应用程序(我称之为工作计划),现在我正在开发一个客户端应用程序来同步Web数据库上的本地数据。因此,我必须完全兼容从客户端到Web的所有数据信息。底部代码只是为特定用户创建workingPlan,此workPlan位于JsonFormat,我想要实现的结果是这样的:

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

您如何看待每天都有startend工作时间。此外,在每一天,我可以有多个休息时间,这是为了拆分工作槽。现在在顶部编码的json是从PHP生成的字符串,而在vb.net中生成的json是DateTimePicker填充的结果。基本上我需要做的是对断点进行定值,现在我在DataGrid中添加断点,例如:

enter image description here

最终的json格式将是(针对此特定情况):

{"monday":{"start":"09:00","end":"18:00","breaks":[{"start":"19:30","end":"19:50"},{"start":"21:40","end":"21:30"}]},"tuesday":{"start":null,"end":null,"breaks":[{"start":null,"end":null},{"start":"14:30","end":"15:00"}]},"wednesday":{"start":"09:00","end":"18:00","breaks":[{"start":"19:37","end":"19:50"}...

管理WeekBreaks Day的类声明如下:

 Public Class WorkDay          

    <JsonProperty("start")>
    Public Property starttime As String
    <JsonProperty("end")>
    Public Property endtime As String
    Public Property breaks As Break()

End Class

Public Class Break              

    <JsonProperty("start")>
    Public Property starttime As String
    <JsonProperty("end")>
    Public Property endtime As String

End Class

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

    Public Sub New()
        monday = New WorkDay
        tuesday = New WorkDay
        wednesday = New WorkDay
        thursday = New WorkDay
        friday = New WorkDay
        saturday = New WorkDay
        sunday = New WorkDay
    End Sub

End Class

现在,为了对每天的休息进行评估,我会迭代这个DataGrid

For Each row As DataGridViewRow In User.break_view.Rows

                If Not row.IsNewRow Then

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

                        workWeek.monday.breaks = row.Cells(1).Value.ToString 'Incriminated line

                    End If

                 ... each day condition

                End If

            Next

workWeek.monday.breaks = row.Cells(1).Value.ToString行上我收到此错误:

  

无法将String转换为Users.Break()

我也想知道是否有优化它的方法,&#39;因为实际上我必须执行7条件并检查迭代中的当前日期是星期一还是星期二等......所以添加打破这个特定的日子。如果我不清楚我解释的事情,请告诉我,我会尝试提供更多和具体的细节。感谢您的关注。

1 个答案:

答案 0 :(得分:1)

首先,您应该将Breaks声明更改为:

Public Property breaks As New List(Of Break)

如答案所示。然后,由于它是List(of Break),您需要向其添加新的Break个对象:

For Each row As DataGridViewRow In User.break_view.Rows
    ' ...or Exit For since it is always the last one:
    If row.IsNewRow Then Continue For

    Dim brk As new Break       ' create a New Break object
    Brk.starttime = row.Cells(1).Value.ToString
    Brk.endtime = row.Cells(2).Value.ToString     '??

    ' figure where to add it
    Select Case row.Cells(0).Value.ToString.ToLowerInvariant
        Case "sunday"
            ' WorkWeek is a Type, avoid using type names as variables:
            myWorkWeek.sunday.Breaks.Add(brk)
        Case "monday"
            myWorkWeek.monday.Breaks.Add(brk)
        ...
     End Select
Next

由于同一个json有多个中断,因此在某个地方必须有更多的内容。但那些也会被添加(只是不确定从哪里)。如果您使用的是字典表单,则可以使用row.Cells(0)作为键来删除案例语句。

如果要改变休息时间(你如何找到这些 1 ?),你可以在你的代码中做到:

myWrkWeek.friday.Breaks(0).starttime = "08:15"
myWrkWeek.friday.Breaks(0).endtime = "17:55"

您还可以通过将starttimeendtime作为参数添加到Break构造函数来加快速度。因为如果没有开始和停止时间,没有理由存在其中一个,这是有道理的。但由于源是DGV单元,因此在代码中看起来不会更清晰。

1 如果这实际上类似于时间卡应用程序,你可能想要每天多次输入/输出时间,那么该类可能有一个返回{{1}的属性给出总累计时间。