Я создал невизуальный компонент в C #, который разработан как заполнитель метаданных в форме.
Компонент имеет свойство, представляющее собой коллекцию пользовательских объектов, этот объект помечен как Serializable и реализует GetObjectData для сериализации и открытый конструктор для десериализации.
В файле resx для формы он сгенерирует двоичные данные для хранения коллекции, однако каждый раз, когда я изменяю сериализованный класс, я получаю ошибки конструктора и мне нужно вручную удалить данные из файла resx, а затем воссоздать заново эти данные.
Я пытался изменить конструктор так, чтобы вокруг каждого свойства в классе был блок try / catch
try
{
_Name = info.GetString("Name");
}
catch (SerializationException)
{
this._Name = string.Empty;
}
но все равно падает. Последняя ошибка, которую я получил, заключалась в том, что мне пришлось реализовать IConvertible.
Я бы предпочел использовать сериализацию xml, потому что я по крайней мере вижу это, возможно ли это
для использования дизайнером?
Есть ли способ сделать сериализацию более стабильной и менее устойчивой к изменениям?
Edit:
Больше информации ... может быть лучше описание
У меня есть класс, который наследует от Компонента, у него есть одно свойство, которое представляет собой набор правил. Кажется, что коллекция правил должна быть помечена как сериализуемая, иначе она не сохраняет своих членов.
Класс Rules также является компонентом с атрибутом DesignTimeVisible (false), чтобы он не отображался на панели компонентов. Этот класс не помечен как Serializable.
Если коллекция, помеченная как Serializable, генерирует двоичные данные в файле resx (не идеально), и среда IDE сообщает, что класс Rules не является Serializable.
Я думаю, что эта проблема выходит за рамки простого вопроса. Так что я, вероятно, закрою его в ближайшее время.
Если у кого-то есть ссылки на что-то подобное, это очень поможет.