2013-06-30 6 views
2

У меня сложная форма. Приложение позволяет нарисовать любое количество этих фигур. Затем я должен сохранить эту картинку в виде XML-файла. Как я могу сохранить их в XML-файле? Создан мой .xml, но есть только такая информация.Сериализация графических объектов

<?xml version="1.0"?> 

[Serializable, XmlRoot(Namespace = "http://www.intertech.com")] 
public class ComplexShape 
{ 
    int x; 
    int y; 
    int a; // large elipse width/2 
    int b; // large elipse height/2 
    Form1 fr; 
    float angle; 
} 
private void saveAsToolStripMenuItem_Click(object sender, EventArgs e) 
    { 
     using (SaveFileDialog saveDlg = new SaveFileDialog()) 
     { 
      // Configure the look and feel of the save dialog. 
      saveDlg.InitialDirectory = "."; 
      saveDlg.Filter = "XML Files|*.xml"; 
      saveDlg.RestoreDirectory = true; 
      saveDlg.FileName = "MyShapes"; 

      if (saveDlg.ShowDialog() == DialogResult.OK) 
      { 
       XmlSerializer xml_serializer = new XmlSerializer(typeof(ComplexShape)); 
       using (Stream fstream = new FileStream(saveDlg.FileName, FileMode.Create, FileAccess.Write, FileShare.None)) 
       { 
        xml_serializer.Serialize(fstream, complexShapes); 
        fstream.Close(); 
        MessageBox.Show("serialized"); 
       }     
      } 
     } 
    } 

complexShapes является массив ComplexShapes, они создания и опираясь на кнопки мыши.

+0

Вам нужно определить свойства на 'complexShapes' для Xml сериализатору работать. – ja72

+0

Сериализация XML не сериализует * private * членов класса. В отличие от двоичной сериализации. Кроме того, атрибут [Serializable] имеет значение только для двоичной сериализации. Имейте в виду, что вы никогда не сможете получить класс формы, сериализованный, с чем вам придется иметь дело, когда вы десериализуете фигуру. Он не совсем принадлежит этому классу. –

ответ

2

Попробуйте это:

public class ComplexShape 
{ 
    int x; 
    int y; 
    int a; // large elipse width/2 
    int b; // large elipse height/2 
    Form1 fr; 
    float angle; 

    [XmlAttribute()] 
    public int X { get { return x; } set { x = value; } } 
    [XmlAttribute()] 
    public int Y { get { return y; } set { y = value; } } 
    [XmlAttribute()] 
    public int A { get { return a; } set { a = value; } } 
    [XmlAttribute()] 
    public int B { get { return b; } set { b = value; } } 
    [XmlIgnore()] 
    public Form1 Form { get { return fr; } } 
    [XmlAttribute()] 
    public float Angle { get { return angle; } set { angle = value; } } 

} 

public class Drawing 
{ 
    List<ComplexShape> shapes = new List<ComplexShape>(); 

    [XmlIgnore()] 
    public List<ComplexShape> Shapes { get { return shapes; } } 

    [XmlArray("Shapes")] 
    public ComplexShape[] ShapesArray 
    { 
     get { return shapes.ToArray(); } 
     set { shapes = new List<ComplexShape>(value); } 
    } 

    public void Save(string fname) 
    { 
     XmlSerializer xml_serializer = new XmlSerializer(typeof(Drawing)); 
     using (Stream fstream = new FileStream(fname, FileMode.Create, FileAccess.Write, FileShare.None)) 
     { 
      xml_serializer.Serialize(fstream, this); 
      fstream.Close(); 
     } 
    } 
} 

class Program 
{ 
    static void Main(string[] args) 
    { 
     Drawing dwg = new Drawing(); 
     dwg.Shapes.Add(new ComplexShape()); 
     dwg.Shapes.Add(new ComplexShape()); 
     dwg.Shapes.Add(new ComplexShape()); 
     dwg.Shapes.Add(new ComplexShape()); 

     dwg.Save("ComplexShape.xml"); 
    } 
} 

с выходом:

<?xml version="1.0"?> 
<Drawing xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <Shapes> 
    <ComplexShape X="0" Y="0" A="0" B="0" Angle="0" /> 
    <ComplexShape X="0" Y="0" A="0" B="0" Angle="0" /> 
    <ComplexShape X="0" Y="0" A="0" B="0" Angle="0" /> 
    <ComplexShape X="0" Y="0" A="0" B="0" Angle="0" /> 
    </Shapes> 
</Drawing> 
Смежные вопросы