【发布时间】:2011-09-27 10:39:25
【问题描述】:
我正在编写一个将“地图”文件保存到 HD 的程序,以便稍后打开它们并显示相同的数据。我的地图最初只保存了一种数据类型,一组我自己的自定义对象,其属性为:id、layer、x 和 y。你可以在这里看到我为此做的代码:
<ProtoContract()> _
Public Class StrippedElement
<ProtoMember(1)> _
Public Property X() As Integer
Get
Return m_X
End Get
Set(ByVal value As Integer)
m_X = value
End Set
End Property
Private m_X As Integer
<ProtoMember(2)> _
Public Property Y() As Integer
Get
Return m_Y
End Get
Set(ByVal value As Integer)
m_Y = value
End Set
End Property
Private m_Y As Integer
<ProtoMember(3)> _
Public Property Id() As Long
Get
Return m_Id
End Get
Set(ByVal value As Long)
m_Id = value
End Set
End Property
Private m_Id As Long
<ProtoMember(4)> _
Public Property Layer() As String
Get
Return m_Layer
End Get
Set(ByVal value As String)
m_Layer = value
End Set
End Property
Private m_Layer As String
End Class
基本上,我只是将大量这些类序列化到一个文件中。现在我发现我必须保存地图的新部分,这些部分不一定是相同的类类型。
是否可以将多种类型保存到同一个文件中,并且仍然可以简单地从中读取?这是我在文件中写入和读取的代码:
Public Shared Sub Save(ByVal File As String, ByVal Map As RedSimEngine.Map)
Dim nPBL As New List(Of StrippedElement)
For z As Integer = 0 To Grid.LAYERLIMIT
For x As Integer = 0 To Grid.GRIDLIMIT
For y As Integer = 0 To Grid.GRIDLIMIT
Dim currentCell As GridElement = Map.Level.getCell(z, x, y)
If currentCell IsNot Nothing Then
If currentCell.Archivable Then
Dim nStEl As New StrippedElement
nStEl.Id = currentCell.getId()
nStEl.Layer = currentCell.getLayer()
nStEl.X = currentCell.X
nStEl.Y = currentCell.Y
nPBL.Add(nStEl)
End If
End If
Next
Next
Next
Serializer.Serialize(New FileStream(File, FileMode.Create), nPBL)
End Sub
Public Shared Function Load(ByVal File As String) As RedSimEngine.Map
Dim nMap As New Map
Dim nListOfSE As List(Of StrippedElement) = Serializer.Deserialize(Of List(Of StrippedElement))(New FileStream(File, FileMode.Open))
For Each elm As StrippedElement In nListOfSE
Dim nElm As GridElement = GridElement.createElementByIdAndLayer(elm.Layer, elm.Id)
nElm.X = elm.X
nElm.Y = elm.Y
nMap.Level.setCell(nElm)
Next
Return nMap
End Function
我必须在保存文件中添加 3 种或更多类类型,我不希望将其拆分,因为这样会让我的客户感到困惑。
基本上,我必须添加类似于以下内容的内容:
- 具有
X、Y和Value的类 - 具有
Name和Value的类 - 具有
Name、ENUMVALUE、X、Y的类,INTEGERVALUE,以及其他一些东西(这个必须包含相当多的数据)。
我使用的是 VB.net,所以所有 .net 答案都是可以接受的。谢谢!如果您需要任何说明,请在 cmets 中说明。
【问题讨论】:
标签: vb.net types protobuf-net save