Ну, список всегда пуст для начала, вы устанавливаете его через myClass.value = new List<...>();
? Также вы сохранили сериализованные данные в двоичном и XML-форматах, чтобы вы могли убедиться, что данные действительно сохраняются?
Также примечание: если вы используете 2.0+, вам не нужно реализовывать ISerializable, если вам не нужно контролировать абсолютную сериализацию, вы можете изменить значение на публичное свойство, и оно будет сериализоваться самостоятельно. .
Редактировать: Кажется, что следующий случай хорошо сериализуется и десериализуется, я публикую этот случай, если я неправильно понимаю вопрос в целом.
Игнорирование неприятного тестового кода, надеюсь, это немного поможет.
[Serializable]
public class OType
{
public int SomeIdentifier { get; set; }
public string SomeData { get; set; }
public override string ToString()
{
return string.Format("{0}: {1}", SomeIdentifier, SomeData);
}
}
[Serializable]
public class MyClass : ISerializable
{
public List<OType> Value;
public MyClass() { }
public MyClass(SerializationInfo info, StreamingContext context)
{
this.Value = (List<OType>)info.GetValue("value", typeof(List<OType>));
}
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue("value", Value, typeof(List<OType>));
}
}
...
var x = new MyClass();
x.Value = new OType[] { new OType { SomeIdentifier = 1, SomeData = "Hello" }, new OType { SomeIdentifier = 2, SomeData = "World" } }.ToList();
var xSerialized = serialize(x);
Console.WriteLine("Serialized object is {0}bytes", xSerialized.Length);
var xDeserialized = deserialize<MyClass>(xSerialized);
Console.WriteLine("{0} {1}", xDeserialized.Value[0], xDeserialized.Value[1]);
Забыл вывод ..
Сериализованный объект размером 754 байта
1: Привет 2: Мир