Если вы не хотите или не можете использовать BinaryFormatter , вам придется десериализовать объект yoursekf
Модифицированный пример из msdn для двоичного форматера:
Допустим, у вас есть модель:
[Serializable] //you could also make the class implement ISerializable
class SomeModel
{
public String Name
{
get;
set;
}
}
у вас есть NetworkStream:
NetworkStream ns;
Базовый пример того, как вы будете выполнять сериализацию:
void Serialize()
{
SomeModel myModel = new SomeModel()
{
Name = "mooo"
};
// Construct a BinaryFormatter and use it to serialize the data to the stream.
BinaryFormatter formatter = new BinaryFormatter();
try
{
formatter.Serialize(ns, myModel);
}
catch (SerializationException e)
{
throw e;
}
}
и что касается десериализации
void Deserialize()
{
SomeModel myModel;
try
{
BinaryFormatter formatter = new BinaryFormatter();
// Deserialize the object from the stream and
// assign the reference to the local variable.
myModel = (SomeModel) formatter.Deserialize(ns);
}
catch (SerializationException e)
{
throw e;
}
}
Есть одна вещь, о которой ты должен позаботиться.
Вы должны знать, когда вы десериализуете, вы не можете просто бросить поток и получить что-то обратно, вы должны знать, что то, что вы собираетесь прочитать, на самом деле является сериализованным SomeModel-классом.
Я не знаю, как выглядит ваш код, поэтому я не знаю, является ли это проблемой или нет, и если это то, как ее избежать.
В любом случае, ваш второй выбор - использовать BinaryReader.
Вам нужно будет создать экземпляр своего объекта и прочитать данные вручную.
using(BinaryWriter writer =
new BinaryWriter(ns))
{
binWriter.Write(myModel.Name);
}
чтение:
using(BinaryReader reader =
new BinaryReader(ns))
{
try
{
SomeModel myModel = new SomeModel();
myModel.Name = binReader.ReadString();
}
// If the end of the stream is reached before reading
// the four data values, ignore the error and use the
// default settings for the remaining values.
catch(EndOfStreamException e)
{
Console.WriteLine("{0} caught and ignored. " +
"Using default values.", e.GetType().Name);
}
}