gpt4 book ai didi

c# - 从 BindingList 和 ISerializable 接口(interface)序列化派生类

转载 作者:太空宇宙 更新时间:2023-11-03 14:03:49 25 4
gpt4 key购买 nike

我从 BindingList 和 ISerializable 接口(interface)派生了类。我想(二进制)序列化这个类,但我无法序列化它的项目。

示例代码:

    [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);
}
}

现在,当我尝试序列化它时。例如像这样:

        MyList testList = new MyList();
testList.Add(new SomeData("first"));
testList.Add(new SomeData("second"));
testList.Add(new SomeData("third"));

MemoryStream stream = new MemoryStream();
BinaryFormatter formatter = new BinaryFormatter();

formatter.Serialize(stream, testList);
stream.Seek(0, SeekOrigin.Begin);

MyList deTestList = (MyList)formatter.Deserialize(stream);

deTestList 包含 3 个 null 项。

已编辑:

有人发现它适用于这个 MyList 构造函数:

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

现在 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>)));
}

deTestList 包含 6 项 null。我不明白。

最佳答案

您根本不需要实现ISerializable,您只需要将Serializable 属性放在您的类上(除非您需要自定义序列化行为)。它在你这样做时工作正常(但我不确定为什么它不适用于你当前的代码......)

关于c# - 从 BindingList 和 ISerializable 接口(interface)序列化派生类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9990137/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com