Простой класс ниже наследует от HashSet и, следовательно, должен реализовывать члены ISerialization (нестандартным образом). Я получаю следующее исключение при попытке сериализации, а затем десериализую экземпляр группы:
Метод испытания 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; }
}
}
Ваш метод GetObjectData
никогда не вызывается во время сериализации, потому что вы не переопределяете родительский метод - вы его затеняете. Вы должны использовать override
, а не new
.