Сериализация структуры и пошаговое считывания данных из файла - C#

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

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

Привет всем!!! Проблема следующая: есть класс метод которого генерирует большое количество данных с последующей записью в структуру. Она после каждого шага цикла должна записываться в файл "*.xml" (тот самый што предыдущая). Также нужно организовать пошаговое считывания этих данных из файла. Пробовал что-то писать: Структура:
public struct B
    {
        public Vector3 B_vect;
        public double B_abs;
        public Vector3 XYZ;
    }
Часть метода записи с циклом:
for (int x = (int)UP_Limit[0] + 1; x <= (int)HIGH_Limit[0]; x++)
            {
                for (int y = (int)UP_Limit[1] + 1; y <= (int)HIGH_Limit[1]; y++)
                {
                    for (int z = (int)UP_Limit[2] + 1; z <= (int)HIGH_Limit[2]; z++)
                    {
                        B Bl = new B();
                        Bl.XYZ = new Vector3(x, y, x);
                        Bl.B_vect = new Vector3(One_Point(Bl.XYZ));
                        Bl.B_abs = lenght(Bl.B_vect);
                        formatter.Serialize(stream, Bl);
                        context.Send(OnProgressReport_X, 1 + 100 * (z - 1) / c);
                       }
                 }
           }
Что получается (файл не полностью и даже не полностью сериализация структуры):
<?xml version="1.0" encoding="utf-8"?>
<B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <B_vect>
    <X>-195.261932</X>
    <Y>-76.62393</Y>
    <Z>271.885864</Z>
  </B_vect>
  <B_abs>343.39535866804488</B_abs>
  <XYZ>
    <X>1</X>
    <Y>1</Y>
    <Z>1</Z>
  </XYZ>
</B><?xml version="1.0" encoding="utf-8"?>
<B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <B_vect>
    <X>-195.261932</X>
    <Y>-76.62393</Y>
    <Z>271.885864</Z>
  </B_vect>
  <B_abs>343.39535866804488</B_abs>
  <XYZ>
    <X>1</X>
    <Y>1</Y>
    <Z>1</Z>
  </XYZ>
</B><?xml version="1.0" encoding="utf-8"?>
<B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <B_vect>
    <X>-195.261932</X>
    <Y>-76.62393</Y>
    <Z>271.885864</Z>
  </B_vect>
  <B_abs>343.39535866804488</B_abs>
  <XYZ>
    <X>1</X>
    <Y>1</Y>
    <Z>1</Z>
  </XYZ>
</B><?xml version="1.0" encoding="utf-8"?>
<B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <B_vect>
    <X>-195.261932</X>
    <Y>-76.62393</Y>
    <Z>271.885864</Z>
  </B_vect>
  <B_abs>343.39535866804488</B_abs>
  <XYZ>
    <X>1</X>
    <Y>1</Y>
    <Z>1</Z>
  </XYZ>
</B><?xml version="1.0" encoding="utf-8"?>
<B xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <B_vect>
    <X>-195.261932</X>
    <Y>-76.62393</Y>
    <Z>271.885864</Z>
  </B_vect>
  <B_abs>343.39535866804488</B_abs>
  <XYZ>
    <X>1</X>
    <Y>1</Y>
    <Z>1</Z>
  </XYZ>
Метод десериализации(Не может десериализувать структуру):
B Bl;
            using (FileStream fs = new FileStream(file+".xml", FileMode.OpenOrCreate))
            {
                Bl = (B)formatter.Deserialize(fs);
            }
            return Bl;
Как мне организовать сериализацию структуры с пошаговою записью ее в файл. Заранее благодарю !!!

Решение задачи: «Сериализация структуры и пошаговое считывания данных из файла»

textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
using System.IO;
using System.Xml.Linq;
 
namespace ConsoleApplication2 {
    class Program {
        static void Main(string[] args) {
            List<STR> strs = new List<STR>();
            Random r = new Random();
            for (int i = 0; i < 10; i++) {
                strs.Add(new STR { X = (100 * r.NextDouble()), Y = (200 * r.NextDouble()) });
            }
            using (Stream fs = new FileStream(@"C:\123.xml", FileMode.Append, FileAccess.Write)) {
                using (StreamWriter sw = new StreamWriter(fs)) {
                    foreach (var s in strs) {
                        sw.Write(string.Format("{0}\n",s.ToString()));
                    }
                }
            }            
            Console.ReadLine();
        }
    }
    struct STR {
        public double X;
        public double Y;
 
        public override string ToString() {
            XDocument doc=new XDocument(new XElement("STR",
                new XElement("X", X),
                new XElement("Y", Y)));
            return doc.ToString();
        }
    }
}

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


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

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

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