Почему мой сериализатор будет работать, если он работает на одном файле, а не на двух? - PullRequest
0 голосов
/ 15 апреля 2020

Хорошо, поэтому название не имеет смысла. Я понял Но я действительно не знаю много об этом. Я пытаюсь создать чат-сервер, и мне нужно отправить класс сообщений через сокет-соединение. Моя сериализация работает нормально, если я сериализую свой объект, десериализую его и распечатаю, но он не будет работать, если я попытаюсь отправить его через сокетное соединение. Как ни странно, раньше все работало нормально, но как только я изменил тип файла на console. net, чтобы настроить его так, чтобы он отключал сокетное соединение до того, как отключится. К сожалению, как только я его изменил, я получил следующую ошибку:

System.Runtime.Serialization.SerializationException: 'Unable to find assembly 'ConsoleApp1, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null'.'

Я не особо разбираюсь в сериализации, но думаю, что я делаю, это создаю поток памяти, в котором я пишу сериализованное сообщение. Затем я отправляю этот поток памяти в виде байтового массива через соединение с сокетом. По прибытии получатель десериализует объект, снова используя поток памяти, и возвращает класс.

Вот код сериализации.

using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Sockets;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
using System.Runtime.Serialization.Formatters;
using System.Threading;
namespace ConsoleApp1
{
    public class messageSerializer
    {
        public static byte[] serializeMessage(object messageToSerialize)
        {
            MemoryStream memoryStream = new MemoryStream();
            BinaryFormatter myBinaryFormatter = new BinaryFormatter();
            myBinaryFormatter.Serialize(memoryStream, messageToSerialize);
            return memoryStream.ToArray();
        }
        public static Message deserializeMessage(byte[] messageToDeserialize)
        {
            MemoryStream memoryStream = new MemoryStream(messageToDeserialize);
            BinaryFormatter myBinaryFormatter = new BinaryFormatter();
            Message message = (Message)myBinaryFormatter.Deserialize(memoryStream);
            return message;
        }

    }
}

Вот класс сообщения.

[Serializable()]
    public class Message 
    { 
        public string identifier { get; }
        public string usernameOfSender { get; }
        public string message { get; }
        public string usernameOfTarget { get; }
        public Message(string identifier, string message, string usernameOfTarget, string usernameOfSender)
        {
            this.identifier = identifier;
            this.usernameOfSender = usernameOfSender;
            this.message = message;
            this.usernameOfTarget = usernameOfTarget;
        }
    }

Я совершенно сбит с толку и был бы признателен за любые советы, будь то подключение к сокету, сериализация или конкретная проблема, с которой я столкнулся.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...