Я действительно не думаю, что вы можете избежать BinaryFormatter. Поскольку тип T может быть любого сложного типа, и каждый экземпляр T может представлять огромный граф переменных в памяти.
поэтому единственное решение, которое у вас есть, это преобразовать ваш экземпляр T в формат byte [], и самое простое решение для этого: BinaryFormatter
На самом деле, причина. МетодWrite () принимает только примитивные типы в том, что он знает, как преобразовать их напрямую в byte [] (используя Convert.ToXXX ()), но не может догадаться, что для универсального типа T.
В качестве обходного пути вы можете определить интерфейс следующим образом:
public interface IBinarySerializable
{
byte[] GetBytes();
}
и затем внедрите его в свой класс:
public class MyClass: IBinarySerializable
{
public int X {get;set;}
public byte[] GetBytes()
{
return BitConverter.GetBytes(X); // and anyother
}
}
и измените свой метод следующим образом:
public void WriteList<T>(List<T> value) where T:IBinarySerializable
{
for (int i = 0; i < value.Count; i++)
{
_writer.Write(value[i].GetBytes());
}
}