【发布时间】:2021-12-11 07:01:03
【问题描述】:
我不知道为什么 Main 中的第二个 foreach 不能按预期工作。我想序列化一个列表,然后将其转换为数组,对其进行排序,再次转换为列表,然后对其进行序列化,但我的反序列化有点不起作用,我不知道为什么。
我的类库:
[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();
}
}
我真的不知道我是否遗漏了什么或者我的反序列化错误,我尝试用谷歌搜索但没有任何帮助,而且我似乎还不了解序列化。
【问题讨论】:
-
旁注:在娱乐的同时,请确保将 BinaryFormatter 的使用仅用于教育目的 - docs.microsoft.com/en-us/dotnet/standard/serialization/…。
-
您能否详细说明一下:我的反序列化有点不起作用?它返回null吗?它会抛出异常吗?其他?
-
@PeterCsala 它实际上没有显示任何内容:D
-
@Mezus 请查看我的帖子。我发现了你的错误。
标签: c# serialization deserialization