using System.Collections.Generic;
internal string m_name = "";
internal int m_position = 0;
internal float m_color = 0f;
internal int m_direction = 0;
internal float m_power = 0f;
public MyItem(string name, int position, float color, int direction, float power) {
public byte[] Serialize() {
using (MemoryStream m = new MemoryStream()) {
using (BinaryWriter writer = new BinaryWriter(m)) {
writer.Write(m_position);
writer.Write(m_direction);
public static MyItem Desserialize(byte[] data) {
using (MemoryStream m = new MemoryStream(data)) {
using (BinaryReader reader = new BinaryReader(m)) {
name = reader.ReadString();
position = reader.ReadInt32();
color = reader.ReadSingle();
direction = reader.ReadInt32();
power = reader.ReadSingle();
return new MyItem(name, position, color, direction, power);
public static class MyItemSerializer
public static byte[] Serialize(this IEnumerable<MyItem> items)
using (MemoryStream m = new MemoryStream())
using (BinaryWriter writer = new BinaryWriter(m, System.Text.Encoding.UTF8, true))
foreach (var item in items)
var itemBytes = item.Serialize();
writer.Write(itemBytes.Length);
public static List<MyItem> Deserialize(byte[] data)
var ret = new List<MyItem>();
using (MemoryStream m = new MemoryStream(data))
using (BinaryReader reader = new BinaryReader(m, System.Text.Encoding.UTF8))
while (m.Position < m.Length)
var itemLength = reader.ReadInt32();
var itemBytes = reader.ReadBytes(itemLength);
var item = MyItem.Desserialize(itemBytes);
public static void Main()
var itemlist = new List<MyItem> { new MyItem("item1", 10, 5, 1, 2), new MyItem("item 2", 100, 54, 11, 22) };
var bytes = MyItemSerializer.Serialize(itemlist);
var deserializedItems = MyItemSerializer.Deserialize(bytes);
foreach (var item in deserializedItems)
Console.WriteLine(">> item " + item.m_name);