Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > сериализация


Автор: LeonGrey 26.5.2013, 13:59
Есть класс 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...
В общем, я запуталась, подскажите, пожалуйста, как решить такую проблему?

Автор: pilotnet 30.5.2013, 11:24
я бы так сделал
Код

public class LengthOnPicture
    {
        [XmlAttribute]
        public double length;
        
        [XmlAttribute]
        public string length_text;
        
        public LengthOnPicture()
        {}
        public LengthOnPicture(double Length, string Length_text)
        {
            length = Length;
            length_text = Length_text;
        }
        [XmlIgnore]
        public double Length
        {
            get { return length; }
        
        }
        [XmlIgnore]
        public string Length_text
        {
            get { return length_text; }
        
        }
    }


    public class DataPictureClass
    {
        [XmlArray("ListPictureClass", IsNullable = true)]
        [XmlArrayItem(typeof(LengthOnPicture), ElementName = "LengthOnPicture")]
        public List<LengthOnPicture> LOPicture { set; get; }

        public DataPictureClass()
        {
            LOPicture = new List<LengthOnPicture>();
        }
        public void AddNewLength(double l, string str)
        {

            LOPicture.Add( new LengthOnPicture(l, str) );
        }
    }


Этот ответ добавлен с нового Винграда - http://ru.vingrad.com//object-id51a1eb376ccc192844000002#findElement_E7045_51a70cb96ccc19d3400014c2_0

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)