#c# #.net #xml #serialization #factory
#c# #.net #xml #сериализация #фабрика
Вопрос:
Это своего рода проблема проектирования:
class Suite
{
List<Plugins> Plugins {get;set;}
}
class DataCollector : Plugin
{
string Property1 {get;set;}
string Property2 {get;set;}
public void PrintMyName();
}
class Measurement: Plugin
{
string Property1 {get;set;}
string Property2 {get;set;}
public void PrintMyName();
}
Теперь я хочу, чтобы набор классов был сериализуемым. Проблема здесь заключается в следующем:
-
Сериализация XML в основном используется для сериализации объектов типа DTO, поэтому вы в основном сериализуете / десериализуете свои свойства с сохранением состояния, и это нормально
-
Этот конкретный класс, который будет сериализован, содержит плагин типа (который содержит комбинацию свойств, которая содержит некоторые значения свойств) функционалисты.
-
Это означает, что мне нужно использовать factory, чтобы заставить реальный экземпляр объекта для плагина ожить со всей его функциональностью со значениями свойств.
Я смотрю на комбинацию XMLSrializable Factory? Есть ли какой-нибудь хороший элегантный способ добиться этого?
Комментарии:
1. Что такое «функционалист»? Кроме того, вероятно, лучше не вводить свой код в MS Word, где ключевые слова, которые не должны быть заглавными, к сожалению, заглавными. (
class
,public
,void
, и т.д.)
Ответ №1:
Почему бы не реализовать IDeserializationCallback
интерфейс, чтобы после десериализации вы могли вернуть свой объект к жизни с помощью вызова вашей фабрики.
Я не совсем понимаю цель ваших классов, но я приведу пример, насколько смогу:
public class MyDataClass : IDeserializationCallback
{
public int SimpleKeyProperty { get; set; }
public string TextProperty{ get; set; }
public void OnDeserialization(object sender)
{
//upon deserialization use the int key to get the latest value from
//factory (this is make believe...)
TextProperty = SomeFactory.GetCurrentValue( this.SimpleKeyProperty) ;
}
}
Комментарии:
1. я думал о разделении класса на две части DTO service. это означает, что DTO будет сброшен в XML, и служба будет запущена factory. Но нужен способ связать их друг с другом
2. Я думаю, что реализация этого интерфейса позволит вам это сделать.
3. Можете ли вы набросать схему этого интерфейса?