Реализация дженериков/абстрактов/интерфейсов с сериализациейC#

Место общения программистов C#
Ответить
Anonymous
 Реализация дженериков/абстрактов/интерфейсов с сериализацией

Сообщение Anonymous »

У меня есть несколько классов, которые необходимо сериализовать с помощью DataContractSerializer, однако я пытаюсь создать общий класс под названием XMLDocument, который позволяет использовать WeatherData, RSSSDocument и ConfigFile (все классы) вместо него. В сценарии а все три класса наследуются от XMLDocument. Все это работает нормально, однако я столкнулся с проблемой в другом классе под названием Slides, который является универсальным классом и принимает XMLDocument в качестве типа.
Я пробовал абстрактный, который не может быть сериализован, Я пытался сделать класс XMLDocument универсальным, но это тоже не помогло.
Как мне реализовать универсальный/абстрактный/интерфейс, чтобы это работало?

Код: Выделить всё

public class Slide where DocumentType : XMLDocument
{
[DataMember]
public DocumentType Page{ get; set; }
//more code down here...
}
Моя ошибка появляется в главном окне. Самое близкое, что мне удалось сделать, это создать конструктор для класса Slide, который принимает и переопределяет тип, вот так

Код: Выделить всё

List slides = new Slide(RSSDocument); 
но это делает его несериализуемым
Главное окно

Код: Выделить всё

static RSSDocument RSSDocument = new RSSDocument();

Slide slide = new Slide();
List slides = new List();
public MainWindow()
{

InitializeComponent();
slides.AddRange(slide.ReadSerializedSlides());
SetTimers();
slides.Clear();
slides.AddRange(MediaRefresh(slide.ReadSerializedSlides()));

}
Класс XMLDocument

Код: Выделить всё

[DataContract]
[XmlInclude(typeof(RSSDocument))]
[XmlInclude(typeof(WeatherData))]
[XmlInclude(typeof(GatherConfig))]
public class XMLDocument
{
public void SerializeDocument()
{
string filename = @"\\motnas\mofilesvr\isystems\apps - IT and utilities\ Programs\DisplayBoardsConfigs\" +
this.GetType().ToString().Replace("DisplayBoard.Classes.", "") + ".txt";
FileStream fs = new FileStream(filename, FileMode.Create);
DataContractSerializer serializer = new DataContractSerializer(this.GetType());
serializer.WriteObject(fs, this);
fs.Close();
}
public object DeserializeDocument()
{
string filename = @"\\motnas\mofilesvr\isystems\apps - IT and utilities\ Programs\DisplayBoardsConfigs\" +
this.GetType().ToString().Replace("DisplayBoard.Classes.", "") + ".txt";
DataContractSerializer serializer = new DataContractSerializer(this.GetType());
XmlSerializer xmlSerializer = new XmlSerializer(this.GetType());
FileStream fs = new FileStream(filename, FileMode.Open, FileAccess.Read, FileShare.ReadWrite);
XmlDictionaryReader reader =
XmlDictionaryReader.CreateTextReader(fs, new XmlDictionaryReaderQuotas());
var XMLDoc = serializer.ReadObject(reader);
fs.Close();
return XMLDoc;
}
public virtual Page CreatePage()
{
return new Page();
}
}
Класс RSSDocument

Код: Выделить всё

[DataContract]
public class RSSDocument : XMLDocument
{
[DataMember]
public string Title { get; set; }
[DataMember]
public string Image { get; set; }
[DataMember]
public string Body { get; set; }
[DataMember]
public string TimeStamp { get; set; }
//Other Functions
}
Любая помощь приветствуется!!!

Подробнее здесь: https://stackoverflow.com/questions/786 ... ialization
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»