下面的简单类继承自HashSet,因此必须实现ISerialization成员(以非标准方式)。当我尝试序列化然后反序列化Group的实例时,我得到以下异常:
测试方法 UtilitiesTests.GroupTest.SerializeTest 抛出异常: System.Reflection.TargetInvocationException: Het doel van een aanroep heeft een uitzondering veroorzaakt。 ---> System.Runtime.Serialization.SerializationException: Lid nameprop是niet gevonden ..
不幸的是,这是荷兰语。这意味着无法找到成员“nameprop”! 有什么不对?
using System;
using System.Collections.Generic;
using System.Runtime.Serialization;
namespace Grouping
{
[Serializable]
public class Group<T> : HashSet<T>
{
public Group(string name)
{
Name = name;
}
protected Group(){}
protected Group(SerializationInfo info, StreamingContext context):base(info,context)
{
Name = info.GetString("nameprop");
}
protected new void GetObjectData(SerializationInfo info,StreamingContext context)
{
base.GetObjectData(info,context);
info.AddValue("nameprop", Name);
}
public string Name { get; private set; }
}
}
答案 0 :(得分:6)
在序列化期间永远不会调用GetObjectData
方法,因为您不会覆盖父方法 - 您将其隐藏。您应该使用override
而不是new
。