循环遍历列表让我重复项目,xml序列化程序

时间:2014-06-03 18:46:23

标签: vb.net xml-serialization

我有两个清单。两者都是由我定义的结构组成,这个循环用于转换两者。即,转换然后添加到另一个类型的第二个列表。这就是我所拥有的:

        Dim tempList As New List(Of CameraTemplateProduct)
        tempList.Clear()


        For j As Integer = 0 To EditCamerasNEW.templateList.Count - 1

            'Set up product object.
            Dim temp As New CameraTemplateProduct()

            'equal properties
            temp.Name = EditCamerasNEW.templateList.Item(j).mac
            temp.Bitrate = EditCamerasNEW.templateList.Item(j).bitrate
            temp.CamDate = EditCamerasNEW.templateList.Item(j).camdate
            temp.CamTime = EditCamerasNEW.templateList.Item(j).camtime
            temp.Encoder = EditCamerasNEW.templateList.Item(j).encoder
            temp.FPS = EditCamerasNEW.templateList.Item(j).fps
            temp.Hostname = EditCamerasNEW.templateList.Item(j).hostname
            temp.MD = CBool(EditCamerasNEW.templateList.Item(j).MDen)
            temp.OSD = CBool(EditCamerasNEW.templateList.Item(j).OSD)
            temp.Resolution = EditCamerasNEW.templateList.Item(j).res

            tempList.Add(temp)

        Next

        'Serialize object to a text file.
        Dim x As New XmlSerializer((tempList.GetType))
        x.Serialize(objStreamWriter, tempList)

非常直截了当。复制每个属性,然后将其添加到列表中。当我在循环中时,temp的值复制得很好。这些值与TemplateList中的项完全相同。当我逐步完成循环时,tempList正是我所期望的。三种不同的结构。但是在病房之后,我得到完全相同数量的物品,但是我的列表中有一个物品的副本。

但是,在下一个循环之后行,tempList与templateList完全相同,但每个值都完全相同。所以每个项目都有相同的名称,MD,编码器等值。

我尝试了什么:我尝试在下一行之后更改

     Dim x As New XmlSerializer((GetType(List(Of CameraTemplateProduct))))

但它给出了相同的结果。

我做错了什么?是否有“templist.gettype”正在做什么导致这个?

修改 我发现temp在循环时不会改变属性值,因此它会一直停留在第一个循环值上。是否有更好的方法来清除或设置它?我尝试将其设置为Nothing,但它给了我NULL赋值错误。

EDIT2:所以在评论之后, 我检查了模板列表项是否在变化。我添加了一个

  Dim test = EditCamerasNEW.templateList(j).mac

为每个循环看它发生了变化。价值确实发生了变化。如上所述,我将“templatelist.item(j).x”的其余部分设置为“templatelist(j)”,但它并没有阻止它创建重复值列表。

EDIT3 尝试以下方法无济于事。我在想我可能会创建班级的临时列表。它可能不知道如何创建产品列表?我会对此提供任何帮助。

                tempList.Add(New CameraTemplateProduct With {.Name = EditCamerasNEW.templateList(j).mac, _
                                                             .Bitrate = EditCamerasNEW.templateList(j).bitrate, _
                                                             .CamDate = EditCamerasNEW.templateList(j).camdate, _
                                                             .CamTime = EditCamerasNEW.templateList(j).camtime, _
                                                             .Encoder = EditCamerasNEW.templateList(j).encoder, _
                                                             .FPS = EditCamerasNEW.templateList(j).fps, _
                                                             .Hostname = EditCamerasNEW.templateList(j).hostname, _
                                                             .MD = EditCamerasNEW.templateList(j).MDen, _
                                                             .OSD = EditCamerasNEW.templateList(j).OSD, _
                                                             .Resolution = EditCamerasNEW.templateList(j).res})

这是CameraTemplateProduct定义的一部分。这很正常:

Public Class CameraTemplateProduct

Public Shared strhostname As String
Public Shared bOSD As Boolean
Public Shared strbitrate As String
Public Shared strencoder As String
Public Shared bMDen As Boolean  'motion detection enabled
Public Shared strres As String
Public Shared intfps As Integer
Public Shared strcamtime As String
Public Shared strcamdate As String
Public Shared strTemplateName As String

'grab properties
Public Property Name() As String
    Get
        Name = strTemplateName
    End Get
    Set(ByVal Value As String)
        strTemplateName = Value
    End Set
End Property

Public Property Hostname() As String
    Get
        Hostname = strhostname
    End Get
    Set(ByVal Value As String)
        strhostname = Value
    End Set
End Property

Public Property OSD() As Boolean
    Get
        OSD = bOSD
    End Get
    Set(ByVal Value As Boolean)
        bOSD = Value
    End Set
End Property

 ' code continues

0 个答案:

没有答案