Custom Object Serilization String Problem
Options
Lukas
✭
Hey, I have a prblem with serilzing a string with the Static Protocol Method.
I can Serialize float int and short with it but not string, i tried my own Method but this throws an ArgumentOutOfRangeException.
Is there a better way to serialize string into my byte[] ?
Here is the Code:
I can Serialize float int and short with it but not string, i tried my own Method but this throws an ArgumentOutOfRangeException.
Is there a better way to serialize string into my byte[] ?
Here is the Code:
public static byte[] SerializeDamageDealerInfo(DamageDealerInfo damageDealerInfo) { int index = 0; byte[] bytes = new byte[INTEGER_INT + INTEGER_INT]; byte[] nameBytes = System.Text.Encoding.UTF8.GetBytes(damageDealerInfo.PlayerName); Protocol.Serialize((int)damageDealerInfo.DamageDealerType, bytes, ref index); Protocol.Serialize(damageDealerInfo.OwnerID, bytes, ref index); byte[] toReturn = new byte[bytes.Length + nameBytes.Length]; Array.Copy(bytes, toReturn, bytes.Length); Array.Copy(nameBytes, 0, toReturn, bytes.Length, nameBytes.Length); return toReturn; }
public static DamageDealerInfo DeSerializeDamageDealerInfo(byte[] bytes) { int index = 0; int damageDealerTypeIndex; DamageDealerInfo.DamgaeDealerTypes type = DamageDealerInfo.DamgaeDealerTypes.Player; int ownerID; string name; Protocol.Deserialize(out damageDealerTypeIndex, bytes, ref index); Protocol.Deserialize(out ownerID, bytes, ref index); name = System.Text.Encoding.UTF8.GetString(bytes, index, bytes.Length); switch (damageDealerTypeIndex) { case 0: type = DamageDealerInfo.DamgaeDealerTypes.Player; break; case 1: type = DamageDealerInfo.DamgaeDealerTypes.Minion; break; case 2: type = DamageDealerInfo.DamgaeDealerTypes.Unit; break; case 3: type = DamageDealerInfo.DamgaeDealerTypes.Building; break; } DamageDealerInfo info = new DamageDealerInfo(type, name, ownerID); return info; }
0
Comments
-
Ok im stupid i found the problem, i had to use ASCII Encoding and forget to substract the index from the bytes lenght when i decode a part of the bytes[] to a string
Here is the Working code if somebody is interested:public static byte[] SerializeDamageDealerInfo(DamageDealerInfo damageDealerInfo) { int index = 0; byte[] bytes = new byte[INTEGER_INT + INTEGER_INT]; byte[] nameBytes = System.Text.Encoding.ASCII.GetBytes(damageDealerInfo.PlayerName); Protocol.Serialize((int)damageDealerInfo.DamageDealerType, bytes, ref index); Protocol.Serialize(damageDealerInfo.OwnerID, bytes, ref index); byte[] toReturn = new byte[bytes.Length + nameBytes.Length]; Array.Copy(bytes, toReturn, bytes.Length); Array.Copy(nameBytes, 0, toReturn, bytes.Length, nameBytes.Length); return toReturn; }
public static DamageDealerInfo DeSerializeDamageDealerInfo(byte[] bytes) { int index = 0; DamageDealerInfo.DamgaeDealerTypes type = DamageDealerInfo.DamgaeDealerTypes.Player; int damageDealerTypeIndex; int ownerID; string name; Protocol.Deserialize(out damageDealerTypeIndex, bytes, ref index); Protocol.Deserialize(out ownerID, bytes, ref index); name = System.Text.Encoding.ASCII.GetString(bytes, index, bytes.Length - index); switch (damageDealerTypeIndex) { case 0: type = DamageDealerInfo.DamgaeDealerTypes.Player; break; case 1: type = DamageDealerInfo.DamgaeDealerTypes.Minion; break; case 2: type = DamageDealerInfo.DamgaeDealerTypes.Unit; break; case 3: type = DamageDealerInfo.DamgaeDealerTypes.Building; break; } DamageDealerInfo info = new DamageDealerInfo(type, name, ownerID); return info; }
0