C#XML序列化/反序列化
我是C#的新手。 我正在上课,我们的一个例子不会编译。 Visual Studio 2010给出了这个错误:XML文档中存在错误(3,2)。
我应该如何编辑XML文件以使其与代码一起使用?
谢谢您的帮助!
public class SerializeIn { public static void Main() { // Declarations. Person[] p = new Person[0]; string infile = "Persons.xml"; StreamReader sr = new StreamReader(infile); XmlSerializer xs = new XmlSerializer(p.GetType()); // Deserialize Person object from disc. p = (Person[])(xs.Deserialize(sr)); // Close StreamReader object to be safe. sr.Close(); // Write what happened. Console.WriteLine("Deserialized array p from output file " + infile + "."); // Print array. foreach(Person x in p) Console.WriteLine(x); Console.ReadLine(); } }
使用系统; namespace XmlArraySerialize {/// /// XmlArraySerialize示例:序列化和反序列化/// Person的数组。 ///
public class Person { public string name; public string gender; public int age; // Noarg constructor needed for compatibility public Person() { } public Person(string theName, string theGender, int theAge) { name = theName; gender = theGender; age = theAge; } public override string ToString() { return name + " " + gender + " " + age; } }
}
和XML文件……
Susan F 21 Michael M 25 Judy F 31 Chloe F 27 Scott M 58 William M 41 Mary F 30
这应该工作)
class Program { static void Main(string[] args) { const string infile = "x:\\Persons.xml"; Persons p; using (var sr = new StreamReader(infile)) { var xs = new XmlSerializer(p.GetType()); p = (Persons)(xs.Deserialize(sr)); } Console.WriteLine("Deserialized array p from output file " + infile + "."); // Print array. foreach (var x in p) Console.WriteLine(x); Console.ReadLine(); } } [XmlType(TypeName = "Persons")] public class Persons : IEnumerable { private List inner = new List (); public void Add(object o) { inner.Add((Person)o); } public IEnumerator GetEnumerator() { return inner.GetEnumerator(); } IEnumerator IEnumerable.GetEnumerator() { return GetEnumerator(); } } public class Person { [XmlAttribute] public int ID { get; set; } public string Name { get; set; } public string Gender { get; set; } public int Age { get; set; } }
有关XmlType的 更多信息 , 有关XmlAttribute的更多信息
谢谢您的意见! 我已经解决了这个问题。 由于代码中没有main方法,因此我必须编辑属性,以便SerializeOut在SerializeIn之前工作。 我猜Persons XML文件只是一个模板……再次感谢!