我不知道为什么第二个foreach
在Main不像预期的那样工作。我想序列化一个列表,然后把它转换成数组,排序,再转换成列表,然后序列化,但是我的反序列化不工作,我不知道为什么。
My class library:
[Serializable]
public class Kolekcja<T> : ISerializable, IEnumerable<T> where T : IComparable<T>
{
private List<T> lista = new List<T>();
[NonSerialized]
private int liczba1, liczba2;
[NonSerialized]
private int suma, roznica, iloczyn;
public void Add(T item)
{
lista.Add(item);
}
public void Remove(T item)
{
lista.Remove(item);
}
public void RemoveAt(int item)
{
lista.RemoveAt(item);
}
public IEnumerator<T> GetEnumerator()
{
return lista.GetEnumerator();
}
IEnumerator IEnumerable.GetEnumerator()
{
return lista.GetEnumerator();
}
void ISerializable.GetObjectData(SerializationInfo info, StreamingContext context)
{
List<T> lista2;
T[] tablica;
//wariant1
tablica = lista.ToArray();
Array.Sort<T>(tablica);
info.AddValue("tablica", tablica, typeof(T[]));
}
public Kolekcja(SerializationInfo sinfo, StreamingContext ctx)
{
T[] tablica = (T[])sinfo.GetValue("tablica", typeof(T[]));
lista = new List<T>(lista);
}
public Kolekcja()
{
}
public Kolekcja(List<T> lista)
{
}
public int Count => lista.Count;
//public int Count { get {return lista.Count;}}
public T Max => lista.Max();
public T Min => lista.Min();
public T this[int i]
{
get { return lista[i]; }
set { lista[i] = value; }
}
public static bool operator <(Kolekcja<T> a, Kolekcja<T> b)
{
return a.Max.CompareTo(b.Min) < 0;
}
public static bool operator >(Kolekcja<T> a, Kolekcja<T> b)
{
return a.Min.CompareTo(b.Max) > 0;
}
}
我主要:
class Program
{
static void Main(string[] args)
{
Kolekcja <int> numbers = new Kolekcja<int>();
numbers.Add(1);
numbers.Add(3);
numbers.Add(2);
foreach(var el in numbers)
{
Console.WriteLine(el);
}
Stream fs = new FileStream("data.dat", FileMode.Create);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fs, numbers);
fs.Close();
fs = new FileStream("data.dat", FileMode.Open);
bf = new BinaryFormatter();
numbers = (Kolekcja<int>) bf.Deserialize(fs);
foreach (var el in numbers)
{
Console.WriteLine(el);
}
fs.Close();
}
}
我真的不知道我是否错过了什么或者我的反序列化做错了,我试过谷歌它,但没有什么真正的帮助,似乎我还不懂序列化。
你的代码有以下错误:
public Kolekcja(SerializationInfo sinfo, StreamingContext ctx)
{
T[] tablica = (T[])sinfo.GetValue("tablica", typeof(T[]));
lista = new List<T>(lista); //bug
}
修复:
public Kolekcja(SerializationInfo sinfo, StreamingContext ctx)
{
T[] tablica = (T[])sinfo.GetValue("tablica", typeof(T[]));
lista = new List<T>(tablica);
}