Как организовать сериализацию экземпляров класса, содержащего список? - C#

Узнай цену своей работы

Формулировка задачи:

Есть класс 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; }
        }
    }
Есть класс DataPictureClass, который хранит список экземпляров класса LengthOnPicture:
[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();
        }
}
Как организовать сериализацию экземпляров класса DataPictureClass, содержащего список? Изначально, когда класс DataPictureClass хранил не экземпляры другого класса, а простые (double и string) поля, я использовала следующий механизм:
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);
            }
        }
Но ведь теперь при сериализации нужно знать не только о типе DataPictureClass, но и LengthOnPicture... В общем, я запуталась, подскажите, пожалуйста, как решить такую проблему?

Решение задачи: «Как организовать сериализацию экземпляров класса, содержащего список?»

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));
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 3.667 из 5
Похожие ответы