Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自定义集合类中的反序列化_C#_.net_Serialization_Stream - Fatal编程技术网

C# 自定义集合类中的反序列化

C# 自定义集合类中的反序列化,c#,.net,serialization,stream,C#,.net,Serialization,Stream,我有一个自定义集合,它向“ArrayList”类添加了功能 下面是该类的一些代码: [Serializable] class Coll : ArrayList { public void Save(string path) { BinaryFormatter formatter = new BinaryFormatter(); FileStream fsOut = ne

我有一个自定义集合,它向“ArrayList”类添加了功能

下面是该类的一些代码:

    [Serializable]
    class Coll : ArrayList
    {

       public void Save(string path)
            {
                BinaryFormatter formatter = new BinaryFormatter();
                FileStream fsOut = new FileStream(path, FileMode.OpenOrCreate, FileAccess.Write);
                formatter.Serialize(fsOut, this);
                fsOut.Dispose();
            }
    }
我现在尝试反序列化一个文件,并用文件的内容填充集合。基本上与我的
Save(字符串路径)
方法相反

到目前为止,我得到的是:

public void Read(string path)
            {
                BinaryFormatter formatter = new BinaryFormatter();
                FileStream fsIn = new FileStream(path, FileMode.Open, FileAccess.Read);
                formatter.Deserialize(fsIn);
                fsIn.Dispose();
            }

我应该如何用反序列化的内容填充集合?

该方法创建一个新对象,用流中的数据初始化它并返回它。因此,您应该使用返回值并将其用作新的
ArrayList
对象。因此,
Read
方法进入一个静态方法,或者——正如diggingforfire建议的那样——进入另一个类。

该方法创建一个新对象,用流中的数据初始化它并返回它。因此,您应该使用返回值并将其用作新的
ArrayList
对象。因此,
Read
方法进入了一个静态方法,或者——正如diggingforfire建议的那样——进入另一个类。

BinaryFormatter
不支持将序列化到现有对象中。您可以将其反序列化为一个新的列表-只需将其设置为一个
静态
方法并返回值即可

其他想法:

  • 除非您在.NET1.1中,否则不要使用
    ArrayList
    List
    会更好
  • 不需要子类;一种扩展方法就足够了
  • 我不推荐使用
    BinaryFormatter
    进行此操作。。。或者别的什么真的

二进制格式化程序
不支持将序列化为现有对象。您可以将其反序列化为一个新的列表-只需将其设置为一个
静态
方法并返回值即可

其他想法:

  • 除非您在.NET1.1中,否则不要使用
    ArrayList
    List
    会更好
  • 不需要子类;一种扩展方法就足够了
  • 我不推荐使用
    BinaryFormatter
    进行此操作。。。或者别的什么真的

为什么不使用
反序列化的返回值呢?
?这是我一直坚持的部分。如何从该输出填充数组?从集合中取出(反)序列化位。然后将整个集合反序列化为一个整体(尽管您可以使用扩展方法来实现相同的语法),您可以执行类似Coll other=formatter的操作;foreach(var-item-in-other){this.Add(item);}但是它带来了很大的开销,并且每个定义都是未分配的。最好在集合之外声明序列化逻辑,或者使Read方法静态返回格式化程序的结果。反序列化(fsIn)强制转换为coll。为什么不使用
反序列化的返回值呢?这是我一直坚持的部分。如何从该输出填充数组?从集合中取出(反)序列化位。然后将整个集合反序列化为一个整体(尽管您可以使用扩展方法来实现相同的语法),您可以执行类似Coll other=formatter的操作;foreach(var-item-in-other){this.Add(item);}但是它带来了很大的开销,并且每个定义都是未分配的。最好在collectionOr之外声明序列化逻辑,或者使Read方法成为静态的,从formatter返回结果。反序列化(fsIn)强制转换为coll。从技术上讲,可以使用序列化代理将序列化转换为现有对象。但这样做可能不是一个好主意。从技术上讲,您可以使用序列化代理将其序列化为现有对象。但这样做可能不是一个好主意。