Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.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# 从BindingList和ISerializable接口序列化派生类_C#_Serialization_Bindinglist - Fatal编程技术网

C# 从BindingList和ISerializable接口序列化派生类

C# 从BindingList和ISerializable接口序列化派生类,c#,serialization,bindinglist,C#,Serialization,Bindinglist,我从BindingList和ISerializable接口派生了类。我想(二进制)序列化该类,但无法序列化其项 示例代码: [Serializable] sealed class SomeData : ISerializable { private string name; public SomeData(string name) { this.name = name; }

我从BindingList和ISerializable接口派生了类。我想(二进制)序列化该类,但无法序列化其项

示例代码:

    [Serializable]
    sealed class SomeData : ISerializable 
    {
        private string name;

        public SomeData(string name)
        {
            this.name = name;
        }

        private SomeData(SerializationInfo info, StreamingContext ctxt)
        {
            name = info.GetString("Name");
        }

        public void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            info.AddValue("Name", name);
        }
    }

    [Serializable]
    class MyList : BindingList<SomeData>, ISerializable
    {
        public MyList()
        {
        }

        private MyList(SerializationInfo info, StreamingContext ctxt)
        {
            ((List<SomeData>)this.Items).AddRange((List<SomeData>)info.GetValue("Items", typeof(List<SomeData>)));
        }

        public void GetObjectData(SerializationInfo info, StreamingContext context)
        {
            info.AddValue("Items", (List<SomeData>)this.Items);
        }
    }
deTestList包含3个空项

编辑:

有人发现它与MyList构造函数一起工作:

        private MyList(SerializationInfo info, StreamingContext ctxt)
             : base((List<SomeData>)info.GetValue("Items", typeof(List<SomeData>))) 
        {
        }
private MyList(SerializationInfo-info,StreamingContext-ctxt)
:base((列表)info.GetValue(“项目”,类型(列表)))
{
}
现在,deTestList包含正确的数据

但当我尝试这个:

        private MyList(SerializationInfo info, StreamingContext ctxt)
             : base((List<SomeData>)info.GetValue("Items", typeof(List<SomeData>))) 
        {
           ((List<SomeData>)this.Items).AddRange((List<SomeData>)info.GetValue("Items", typeof(List<SomeData>)));
        }
private MyList(SerializationInfo-info,StreamingContext-ctxt)
:base((列表)info.GetValue(“项目”,类型(列表)))
{
((List)this.Items).AddRange((List)info.GetValue(“Items”,typeof(List));
}
deTestList包含6个空项。
我不明白。

您根本不需要实现
ISerializable
,只需要在类中添加
Serializable
属性(除非您需要自定义序列化行为)。这样做很好(但我不确定为什么它不能与当前代码一起工作…

类有另一个变量,我没有在示例代码中显示,我需要为它们自定义序列化行为,所以我需要实现ISerializable。哪个类,MyList还是SomeData?如果其中只有一个实现了ISerializable,那么这似乎是可行的……它们都需要实现ISerializable。奇怪。。。我可以看到SomeData对象被正确反序列化,但只有在列表被反序列化之后。。。
        private MyList(SerializationInfo info, StreamingContext ctxt)
             : base((List<SomeData>)info.GetValue("Items", typeof(List<SomeData>))) 
        {
           ((List<SomeData>)this.Items).AddRange((List<SomeData>)info.GetValue("Items", typeof(List<SomeData>)));
        }