using System.Collections.Generic;
using System.Xml.Serialization;
using UnityEngine;
using System.IO;
using System;
using System.Runtime.Serialization.Formatters.Binary;
using Newtonsoft.Json;
public class SerializeTest : MonoBehaviour
{
private void Start()
{
//TestSerialize testSerialize = new TestSerialize
//{
// age = 100,
// list = new List<int> { 1, 2, 3 },
// name = "呵呵哈哈",
// isFinished =false
//};
#region Xml
//Xml序列化
//XMLUtil.XMLSerialize<TestSerialize>(Application.dataPath + "/123.xml", testSerialize);
//Xml反序列化
//TestSerialize testSerialize= XMLUtil.XMLDeserialize<TestSerialize>(Application.dataPath + "/123.xml");
//Debug.Log(testSerialize.name);
#endregion
#region 二进制
//二进制序列化
//BinaryUtil.BinarySerialize<TestSerialize>(Application.dataPath + "/123.txt", testSerialize);
//TestSerialize testSerialize= BinaryUtil.BinaryDeSerialize<TestSerialize>(Application.dataPath + "/123.txt");
//Debug.Log(testSerialize.age + " " + testSerialize.name);
#endregion
#region json
//json 序列化
//JsonUtil.JsonSerialize<TestSerialize>(Application.dataPath + "/123.json", testSerialize);
//json反序列化
TestSerialize testSerialize = JsonUtil.JsonDeserialize<TestSerialize>(Application.dataPath + "/123.json");
Debug.Log(testSerialize.age + " " + testSerialize.name);
#endregion
}
}
[Serializable]
public class TestSerialize
{
[XmlElement("Age")] //可写可不写
public int age;
[XmlArray("IDs")]
[XmlArrayItem("ID")]
public List<int> list;
[XmlElement("Name")]
public string name;
[XmlIgnore] //该成员不进行序列化
[JsonIgnore]
public bool isFinished;
}
public class XMLUtil
{
/// <summary>
/// xml序列化 将对象转化成数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="xmlPath"></param>
/// <param name="data"></param>
public static void XMLSerialize<T>(string xmlPath, T data)
{
TextWriter sw = new StreamWriter(xmlPath);
XmlSerializer obj = new XmlSerializer(typeof(T));
obj.Serialize(sw, data);
sw.Close();
}
/// <summary>
/// xml反序列化 将数据转化成对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="xmlPath"></param>
/// <returns></returns>
public static T XMLDeserialize<T>(string xmlPath)
{
try
{
TextReader reader = new StreamReader(xmlPath);
XmlSerializer obj = new XmlSerializer(typeof(T));
object data = obj.Deserialize(reader);
reader.Close();
return (T)data;
}
catch (Exception ex)
{
Debug.Log("error:" + ex.ToString());
return default(T);
}
}
}
public class BinaryUtil
{
/// <summary>
/// 二进制序列化 将对象转化成数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="filePath"></param>
/// <param name="t"></param>
public static void BinarySerialize<T>(string filePath, T t)
{
FileStream fileStream = new FileStream(filePath, FileMode.OpenOrCreate);
BinaryFormatter bf = new BinaryFormatter();
bf.Serialize(fileStream, t);
fileStream.Close();
}
/// <summary>
/// 二进制反序列化 将数据转化成对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="filePath"></param>
/// <returns></returns>
public static T BinaryDeSerialize<T>(string filePath)
{
try
{
FileStream fileStream = new FileStream(filePath, FileMode.Open);
BinaryFormatter bf = new BinaryFormatter();
object data = bf.Deserialize(fileStream);
return (T)data;
}
catch (Exception ex)
{
Debug.Log("error:" + ex.ToString());
return default(T);
}
}
}
public class JsonUtil
{
/// <summary>
/// json序列化到本地,将对象转化成数据
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="filePath"></param>
/// <param name="t"></param>
public static void JsonSerialize<T>(string filePath, T t)
{
FileStream fileStream = new FileStream(filePath, FileMode.OpenOrCreate);
string str = JsonConvert.SerializeObject(t);
StreamWriter streamWriter = new StreamWriter(fileStream);
fileStream.SetLength(0);//清空文件
streamWriter.Write(str);
streamWriter.Close();
fileStream.Close();
}
/// <summary>
/// json反序列化,将数据转成对象
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="filePath"></param>
/// <returns></returns>
public static T JsonDeserialize<T>(string filePath)
{
//StreamReader streamReader = new StreamReader(filePath);
FileStream fileStream = new FileStream(filePath, FileMode.OpenOrCreate);
StreamReader streamReader = new StreamReader(fileStream);
string str = streamReader.ReadToEnd();
fileStream.Close();
streamReader.Close();
var jsonSetting = new JsonSerializerSettings();
jsonSetting.NullValueHandling = NullValueHandling.Ignore;
return JsonConvert.DeserializeObject<T>(str,jsonSetting );
}
}
Xml、二进制流、Json字符串的序列化以及反序列化
最新推荐文章于 2022-11-29 15:05:34 发布