Problem when serializing an object

Asked

Viewed 86 times

0

I’m trying to use serialization to transfer data between Server and Client. However, I am having trouble trying to deserialize a class that has a type List of another class, when the class to be deserialized has no such list there is no error.

Error:

inserir a descrição da imagem aqui

Function to serialize:

private static void Serialize(NetOutgoingMessage Data, object Element)
{
    // Serializa os dados
    MemoryStream Stream = new MemoryStream();
    new BinaryFormatter().Serialize(Stream, Element);
    Data.Write(Stream.GetBuffer().Length);
    Data.Write(Stream.GetBuffer());
    Stream.Close();
}

Function to deserialize:

private static object Deserialize(NetIncomingMessage Data)
{
    // Deserializa os dados
    BinaryFormatter Formater = new BinaryFormatter();
    Formater.Binder = new Program.Binder();
    return Formater.Deserialize(new MemoryStream(Data.ReadBytes(Data.ReadInt32())));
}

Binder:

public class Binder : System.Runtime.Serialization.SerializationBinder
{
    public override Type BindToType(string assemblyName, string typeName)
    {
        assemblyName = assemblyName.Replace("Client", "Server");
        return Type.GetType(string.Format("{0}, {1}", typeName, assemblyName));
    }
}

Classes to be serialized:

    [Serializable]
    public class NPC
    {
        public string Name;
        public string SayMsg;
        public short Texture;
        public byte Behaviour;
        public byte SpawnTime;
        public byte Sight;
        public int Experience;
        public short[] Vital;
        public short[] Attribute;
        public List<NPC_Drop> Drop;
        public bool AttackNPC;
        public List<short> Allie;
        public byte Movement;
        public byte Flee_Helth;
    }

    [Serializable]
    public class NPC_Drop
    {
        public short Item_Num;
        public short Amount;
        public byte Chance;
    }

How I send the data:

public static void Write_NPCs()
{
    NetOutgoingMessage Data = Socket.Device.CreateMessage();

    // Envia os dados
    Data.Write((byte)Packets.Write_NPCs);
    Serialize(Data, Lists.NPC);
    Packet(Data);
}

How I get:

private static void Write_NPCs(byte Index, NetIncomingMessage Data)
{
    // Lê e salva os dados 
    Lists.NPC = (Lists.Structures.NPC[])Deserialize(Data);
    Write.NPCs();
}
  • Weird code, because you’re doing it like this, because you don’t use a guy to do it for you?

  • What do you mean, a guy? @Virgilionovic

  • There is already a package that does this !!! because it is doing so so?

  • 1

    Complementing what Virgilio commented, I will do a free jabá here but it is usually used newtonsoft json, including found in git of . net a very constructive conversation about the use of binaryformatter being deprecated https://github.com/dotnet/runtime/issues/23341#issuecomment-325826116

No answers

Browser other questions tagged

You are not signed in. Login or sign up in order to post.