我正在尝试序列Dictionary<int, int>
化为Dictionary<string, string>
.
所以我创建了如下Test2
类型:Dictionary<int, int>
[Serializable]
internal sealed class Test2 : Dictionary<int, int>
{
internal Test2()
{
}
private Test2(SerializationInfo info, StreamingContext context)
{
var data = (Dictionary<string, string>)
info.GetValue("data", typeof(Dictionary<string, string>));
foreach (var item in data)
Add(int.Parse(item.Key), int.Parse(item.Value));
}
public override void GetObjectData(SerializationInfo info, StreamingContext context)
{
var data = new Dictionary<string, string>();
foreach (var item in this)
data[item.Key.ToString()] = item.Value.ToString();
info.AddValue("data", data, typeof(Dictionary<string, string>));
}
}
并使用以下代码测试序列化:
var test2 = new Test2 {{10, 10}};
var formatter = new BinaryFormatter();
using (var stream = new MemoryStream())
{
formatter.Serialize(stream, test2);
stream.Position = 0;
var clone = (Test2) formatter.Deserialize(stream);
}
由于某种原因,克隆不包含任何数据(Count eq 为 0)。
更新:
“int”和“string”在这里仅用于测试。在实际应用程序中,我使用主键而不是字符串和大对象而不是 int 之类的东西,并且序列化数组包含它们之间的关系。通过减少不相关的代码并用上面的示例替换我最终得到的类型。
我只能使用 .NET 框架功能。