一个potobuf-net'ized文件我正在写一个程序,保存文件“映射”到HD这样我可以在以后打开它们,并显示相同的数据。我的地图最初保存只有一个数据类型,一组具有的属性我自己的自定义对象:id
,layer
,x
和y
。你可以看到我做的代码,这里:保存多种文件类型为在VB.net
<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
,A级,Y
,并Value
- 与
Name
和Value
类 - 与
Name
,A级,ENUMVALUE
,X
,Y
,INTEGERVALUE
,和几个其他的事情(这一个必须包含相当多的数据)。
我正在使用VB.net,因此所有的.net答案都可以接受。谢谢!如果您需要澄清,请在评论中说明。
@OP你再次救了我先生Gravell先生!我只是实现了你提供的Wrapper方法,没有一个单一的顺利!万分感谢! – FreeSnow