我有这段代码,允许用户读取文本文件或XML文件 当他选择文本文件时工作正常,但当他选择XML文件时 显示此错误: XML文档中的错误(1,1)。
这是我的代码:
OpenFileDialog op = new OpenFileDialog();
op.Filter = "XML|*.xml|text|*.txt";
if (op.FilterIndex == 1)
{
if (op.ShowDialog() == DialogResult.OK)
{
StreamReader Infile = new StreamReader(op.FileName);
XmlSerializer Des = new XmlSerializer(typeof(List<classname>));
Program.ListStudent = (List<classname>)Des.Deserialize(Infile);
Infile.Close();
}
}
else
{
if (op.FilterIndex == 2)
{
if (op.ShowDialog() == DialogResult.OK)
{
StreamReader Infile = new StreamReader(op.FileName);
string header = Infile.ReadLine();
while (!Infile.EndOfStream)
{
string line = Infile.ReadLine();
string[] parts = line.Split(new char[] { '\t' }, System.StringSplitOptions.RemoveEmptyEntries);
s.Id = Convert.ToInt64(parts[0]);
s.Fname = parts[1];
s.Lname = parts[2];
Program.ListStudent.Add(s);
}
Infile.Close();
}
}
}
这是XML文件
<ArrayOfStudent xmlns:xsi="w3.org/2001/XMLSchema-instance"; xmlns:xsd="w3.org/2001/XMLSchema">; <Student> <Id>12345</Id> <Fname>Mohammad</Fname> <Lname>Ali</Lname> </Student> </ArrayOfStudent>
&#13;
答案 0 :(得分:0)
试试这个......
首先,您的XML似乎无效,我不知道您是否正在使用&#39 ;;&#39;但他们不应该在那里......
以下是一些将您的XML反序列化为List
的代码Usings
using System;
using System.Collections.Generic;
using System.Xml.Serialization;
using System.IO;
类
[XmlRoot(ElementName = "Student")]
public class Student
{
[XmlElement(ElementName = "Id")]
public string Id { get; set; }
[XmlElement(ElementName = "Fname")]
public string Fname { get; set; }
[XmlElement(ElementName = "Lname")]
public string Lname { get; set; }
}
码
class Program
{
static void Main(string[] args)
{
try
{
List<Student> deserializedList = new List<Student>();
deserializedList = Deserialize<List<Student>>();
}// Put a break-point here, then mouse-over deserializedList
catch (Exception)
{
throw;
}
}
private static T Deserialize<T>() where T : new()
{
// Create an instance of T
T ReturnListOfT = CreateInstance<T>();
// Create a new file stream for reading the XML file
using (FileStream ReadFileStream = new FileStream("xml.xml", FileMode.Open, FileAccess.Read, FileShare.Read))
{
// Construct a XmlSerializer and use it
// to serialize the data from the stream.
XmlSerializer SerializerObj = new XmlSerializer(typeof(T));
try
{
// Deserialize the hashtable from the file
ReturnListOfT = (T)SerializerObj.Deserialize(ReadFileStream);
}
catch (Exception ex)
{
Console.WriteLine(string.Format("Failed to serialize. Reason: {0}", ex.Message));
}
}
// return the Deserialized data.
return ReturnListOfT;
}
// function to create instance of T
public static T CreateInstance<T>() where T : new()
{
return (T)Activator.CreateInstance(typeof(T));
}
}
这就是你的XML应该是什么样的
<ArrayOfStudent xmlns:xsi="w3.org/2001/XMLSchema-instance" xmlns:xsd="w3.org/2001/XMLSchema">
<Student>
<Id>12345</Id>
<Fname>Mohammad</Fname>
<Lname>Ali</Lname>
</Student>
</ArrayOfStudent>
将XML保存到与应用程序* .exe
相同的文件夹中名为xml.xml的文件中