Как организовать сериализацию экземпляров класса, содержащего список? - C#
Формулировка задачи:
Есть класс LengthOnPicture, который хранит расстояние и текст:
Есть класс DataPictureClass, который хранит список экземпляров класса LengthOnPicture:
Как организовать сериализацию экземпляров класса DataPictureClass, содержащего список?
Изначально, когда класс DataPictureClass хранил не экземпляры другого класса, а простые (double и string) поля, я использовала следующий механизм:
Но ведь теперь при сериализации нужно знать не только о типе DataPictureClass, но и LengthOnPicture...
В общем, я запуталась, подскажите, пожалуйста, как решить такую проблему?
[Serializable]
public class LengthOnPicture
{
private double length; // расстояние
private string length_text;
public LengthOnPicture(double Length, string Length_text)
{
length = Length;
length_text = Length_text;
}
public double Length
{
get { return length; }
}
public string Length_text
{
get { return length_text; }
}
}[Serializable]
public class DataPictureClass
{
private List<LengthOnPicture> LOPicture = new List<LengthOnPicture>();
public void AddNewLength(double l, string str)
{
LengthOnPicture len = new LengthOnPicture(l, str);
LOPicture.Add(len);
LOPicture.ToArray();
}
}public static string SerializeToString(object obj)
{
XmlSerializer serializer = new XmlSerializer(obj.GetType());
using (StringWriter writer = new StringWriter())
{
serializer.Serialize(writer, obj);
return writer.ToString();
}
}
public static T SerializeFromString<T>(string xml)
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
using (StringReader reader = new StringReader(xml))
{
return (T)serializer.Deserialize(reader);
}
}Решение задачи: «Как организовать сериализацию экземпляров класса, содержащего список?»
textual
Листинг программы
[Serializable]
public class LengthOnPicture
{
public LengthOnPicture(double length, string length_text)
{
Length = length;
Length_text = length_text;
}
[XmlAttribute] // поле можно задать как атрибут
public double Length { get; set; }
[XmlElement] // поле можно задать как елемент
public string Length_text { get; set; }
}
[Serializable]
public class DataPictureClass
{
public List<LengthOnPicture> LOPicture { get; set; }
public DataPictureClass()
{
LOPicture = new List<LengthOnPicture>();
}
public void AddNewLength(double l, string str)
{
LOPicture.Add(new LengthOnPicture(l, str));
}
}