Сериализация объекта для передачи по сети - C#
Формулировка задачи:
Здравствуйте много.
Взываю к вам, ибо ответа найти я не могу =(
В шарпы пришел из С, и сейчас надо переделать приложение, раннее написанное. Столкнулся со скользким моментом... В С я открывал соккет и бросал туда структуру, в которой хранились данные. Структура отправлялась, а на другой стороне я просто ее принимал и приводил к типу такой же структуры. В шарпах нужно использовать сериализацию объекта, я это понимаю.. Но в инете примеры сериализации только для файлов. В примерах автор открывает поток, допустим Streamwriter и пишет в него объект..
Но вот в чем проблема...
Строку шлет без проблем, а вот с объектами не понимаю.
Чтобы сериализовать объект хотел использовать
Но Serialize работает с потоками, а с соккетами работать отказывается =(
Направьте на путь истинный пожалуйста
[Serializable]
public class MSG
{
public int type;
public string message;
public MSG(int t, string m)
{
type = t;
message = m;
}
}Socket sender;
MSG buf = new MSG(1, "123131");
sender = new Socket(AddressFamily.InterNetwork,
SocketType.Stream, ProtocolType.Tcp);
try
{
sender.Connect(_Addr.ipEndPoint);
}
catch (Exception e)
{
Console.WriteLine("Не удалось соединиться с сервером:");
Console.WriteLine(e.Message);
}
Console.WriteLine("Connecting to [{0}] complete",
sender.RemoteEndPoint.ToString());BinaryFormatter answFormatter = new BinaryFormatter(); answFormatter.Serialize(sender, buf);
Решение задачи: «Сериализация объекта для передачи по сети»
textual
Листинг программы
using System;
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
namespace Serialization
{
[Serializable]
class MSG
{
public int type;
public string message;
public MSG(int i, string s)
{
type = i;
message = s;
}
}
class Program
{
public static byte[] Serialization (MSG obj)
{
BinaryFormatter formatter = new BinaryFormatter();
MemoryStream stream = new MemoryStream();
formatter.Serialize(stream, obj);
byte[] msg = stream.ToArray();
return msg;
}
public static MSG DeSerialization (byte[] serializedAsBytes)
{
MemoryStream stream = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();
stream.Write(serializedAsBytes, 0, serializedAsBytes.Length);
stream.Seek(0, SeekOrigin.Begin);
return (MSG)formatter.Deserialize(stream);
}
public static void Main(string[] args)
{
MSG msg = new MSG(1,"Я не сериализован");
byte[] buf = new byte[1024];
buf = Serialization(msg);
Console.WriteLine("До сериализации " + buf);
MSG msg1 = new MSG(2,"Текст");
msg1 = DeSerialization (buf);
Console.WriteLine("После сериализации " + msg1.message);
Console.Write("Press any key to continue . . . ");
Console.ReadKey(true);
}
}
}