C#中,可以使用XmlSerializer
类来实现序列化和反序列化。
需要序列化的类型前标注[XmlRoot("objects")]
表示根节点;
[XmlType(TypeName = "Name")]
表示节点
[XmlElement("Name")]
表示元素/节点
[XmlAttribute("Name")]
表示属性
注:私有属性不会被序列化;标注为[XmlIgnore]
的共有属性也不会被序列化;枚举类型的属性序列化前要赋值。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Serialization;
namespace ConsoleApp2
{
[XmlRoot("Person")]
public class Person
{
[XmlElement("person")]
public List<person> Persons { get; set;}
}
public class person
{
[XmlAttribute("name")]
public string name { get; set; }
[XmlAttribute("age")]
public int age { get; set; }
}
public class Serializer
{
public void ObjectToXml<T>(T t,string path) where T : class
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
using(FileStream file=new FileStream(path, FileMode.OpenOrCreate))
{
serializer.Serialize(file, t);
}
}
public string ObjectToXmlStr<T>(T t,string path)where T : class
{
XmlSerializer serializer=new XmlSerializer(typeof(T));
using(MemoryStream stream=new MemoryStream())
{
serializer.Serialize(stream, t);
// return stream.ToString();
string str=System.Text.Encoding.UTF8.GetString(stream.ToArray());
return str;
}
}
public T XmlToObject<T>(T t,string path) where T : class
{
XmlSerializer serializer=new XmlSerializer(typeof(T));
using(FileStream file=new FileStream(path, FileMode.OpenOrCreate))
{
//XmlReader reader = new XmlTextReader(file);
// XmlReader reader = XmlReader.Create(@path);
XmlTextReader reader=new XmlTextReader(file);
T ans = serializer.Deserialize(reader) as T;
return ans;
}
}
}
public class Program
{
public static void Main(string[] args)
{
string path = "D:\\Lcode\\ACS_Xml_Tool\\ConsoleApp2\\bin\\Debug\\module.xml"; //路径自己设置
Person per = new Person { Persons = new List<person>() };
person p1 = new person { name = "asd", age = 20 };
person p2 = new person { name = "fgh", age = 23 };
person p3 = new person { name = "rty", age = 30 };
per.Persons.Add(p1);
per.Persons.Add(p2);
per.Persons.Add(p3);
Serializer serializer = new Serializer();
serializer.ObjectToXml(per, path);
string str = serializer.ObjectToXmlStr(per, path);
Console.WriteLine(str);
//Person person = new Person();
//Serializer serializer = new Serializer();
//person = serializer.XmlToObject(person, path);
//foreach (var v in person.Persons)
//{
// Console.WriteLine($"the age of {v.name} is {v.age}");
//}
Console.ReadLine();
}
}
}