unity xml序列化/反序列化

需要引入命名空间:

using System.IO;
using System.Xml;
using System.Xml.Serialization;

[Serializable] //需要特别注意 添加
public class roots
{
  [XmlElement("userName")] //需要特别注意 添加(名字需要喝xml名字一致)
  public List<userName> usernamelist;
}
[Serializable] //需要特别注意 添加
public class userName
{
  public int id;
  public string path;
}

xml文件

<?xml version="1.0" encoding="utf-8"?>
  <roots xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <userName name ="Hxx">
      <id>0</id>
      <path>北京市海淀区</path>
    </userName>
    <userName name ="Wxx">
      <id>1</id>
      <path>北京市大兴区</path>
    </userName>
    <userName name ="Mxx">
      <id>2</id>
      <path>北京市昌平区</path>
    </userName>
  </roots>

1.反序列化

   XmlDocument document = new XmlDocument();

    document.Load(“path”); //加载Xml文件

  StringReader sr = new StringReader(document.InnerXml); //创建读文件流

  XmlSerializer xmlSerializer = new XmlSerializer(typeof(roots)); //声明Xml序列化对象(roots)实例xmlSerializer 

  roots root = (roots)xmlSerializer.Deserialize(sr);//反序列化成对象

  sr.Close();//关闭文件流

2.序列化  (利用上面反序列化的数据类  root)

(1)通过文件流读取的方式

  FileStream fs = new FileStream("path", FileMode.Create, FileAccess.ReadWrite);//选择输出的流文件

  StreamWriter sw = new StreamWriter(fs, System.Text.Encoding.UTF8);//创建写文件流

  XmlSerializer serializer = new XmlSerializer(typeof(roots));//声明Xml序列化对象(roots)实例serializer 

  serializer.Serialize(sw, root);序列化成xml

  sw.Close();;//关闭文件流

 (2)通过类转二进制获得xml字符串

  XmlSerializer xml = new XmlSerializer(typeof(T), type);
  MemoryStream memStream = new MemoryStream();

  xml.Serialize(memStream, roots);

  byte[] bobj = memStream.ToArray();
  string xmlString = Encoding.UTF8.GetString(bobj);
  memStream.Close();

有不正确地方的欢迎留言指正!!!!

 

posted @ 2022-04-22 11:08  H❥嘉  阅读(233)  评论(0)    收藏  举报