Как открыть несколько файлов XML в WinForms C #?

Sergio Marquez спросил: 13 июня 2018 в 07:25 в: c#

Хороший день, мне нужно отделить несколько файлов XML в моем приложении Windows Forms, он должен работать следующим образом. Итак, я пробовал так много альтернатив, но это самый близкий к моей цели код.

    `private OpenFileDialog openFileDialog1 = new OpenFileDialog();
    private void ImportIcon_Click(object sender, EventArgs e)
    {
        IfSound();
        openFileDialog1.Filter = "Analytica Files (*.analy) |*.analy";
        openFileDialog1.Multiselect = true;
        if (openFileDialog1.ShowDialog() == DialogResult.OK)
        {
            var Path = openFileDialog1.FileName;
            foreach (string file in openFileDialog1.FileNames)
            {
                Settings.Default.FileList.Add(file);
                Settings.Default.Save();
                //Settings.Default.Upgrade();
            }
            //XmlSerializer XS = new 
            //XmlSerializer(typeof(List<Information>));
            //StreamReader Reader = new StreamReader(Path);
            //Information i;
            //var input = XS.Deserialize(Reader);
            //Settings.Default.Counter++;
            //Settings.Default.Save();
        }
        else
        {
            MessageBox.Show("Exception Found In File");
        }
    }
    foreach (string TheFile in Settings.Default.FileList)
        {
            Reminders.TaskUC Task = new Reminders.TaskUC();
            Point TP = new Point();
            Task.Name = "Task" + Settings.Default.Counter.ToString();
            TP.Y = 1;
            int Add = 300;
            int Result = Start;
            int Distance = 100;
            Control Last = Controls[Controls.Count - 1];
            TP.X = Last.Location.X + Distance;
            if (Settings.Default.FileList.Count == 1)
            {
                TP.X = 300;
            }
            Size PanelWidth = new Size();
            PanelWidth.Width = ReminderPanel.Width + 300;
            PanelWidth.Height = ReminderPanel.Height;
            Task.Location = TP;
            this.Controls.Add(Task);
            ReminderPanel.Size = PanelWidth;
            ReminderPanel.Controls.Add(Task);
            XmlSerializer XS = new XmlSerializer(typeof(List<Information>));
            FileStream Read = new FileStream(TheFile, FileMode.Open, 
            FileAccess.Read, FileShare.Read);
            Information i = new Information();
            XS.Deserialize(Read);
            Task.TitleBox.Text = i.Title1;
         }            This is the class code:
             public class Information
{
       private string Title;
       private string Description;
       private DateTime Date;
       private DateTime Hour;
       private bool Check;
       public string Title1
    {
        get { return Title; }
        set { Title = value; }
    }    public string Description2
    {
        get { return Description; }
        set { Description = value; }
    }    public DateTime Date3
    {
        get { return Date; }
        set { Date = value; }
    }    public DateTime Hour4
    {
        get { return Hour; }
        set { Hour = value; }
    }
    public bool Check5
    {
        get { return Check; }
        set { Check = value;}
    }
public class SaveXML
{
    public static void SaveData(object obj, string filename)
    {
        XmlSerializer SR = new XmlSerializer(obj.GetType());
        TextWriter Writer = new StreamWriter(filename);
        SR.Serialize(Writer, obj);
        Writer.Close();
    } `

Когда эта строка работает, XS.Deserialize(Read); Приложение останавливается и отображает следующую ошибку:

System.InvalidOperationException: "Ошибка в XML-документе (2, 2)". Inner Exception.InvalidOperationException: не ожидает . (Иногда он отображает (0, 0). Вместо (2, 2).)

Изменить
Это мой XML-файл e Code, Любопытно, что другие XML-файлы недействительны, например, они не имеют ничего внутри, у этого есть эти данные внутри:
<?xml version="1.0" encoding="utf-8"?> <Information xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Title1>12</Title1> <Description2>Description</Description2> <Date3>2018-02-27T22:05:39</Date3> <Hour4>2018-02-27T22:05:39</Hour4> </Information>

1 ответ

mrmichaeldev ответил: 13 июня 2018 в 10:42

Ваш код отлично работает:

XS = new XmlSerializer(typeof(Information));

Похоже, вы изменили тип десериализации, прежде чем вы изменили свой XML:

new XmlSerializer(typeof(List<Information>));

Вам нужно изменить свой XML-файл, чтобы он был таким: он должен работать:

<?xml version="1.0"?>
<ArrayOfInformation xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <Information>
      <Title1>12</Title1>
      <Description2>Description</Description2>
      <Date3>2018-02-27T22:05:39</Date3>
      <Hour4>2018-02-27T22:05:39</Hour4>
  </Information>
</ArrayOfInformation>
Sergio Marquez ответил: 13 июня 2018 в 12:28
Ошибка исчезла, но она не десериализует даже один файл.

Дополнительное видео по вопросу: Как открыть несколько файлов XML в WinForms C #?

Как быстро открыть документ xml c Росрееста в читабельном виде

Видео курс C# Professional. Урок 5. XML. Файлы конфигурации. Реестр

Как работать с файлами в C#