【Unity】Object を XML 文字列に変換する
XMLファイルは見通しがそんなに良くないと感じているので、あまり使いたくはないのですがAndroidManifest ファイルが xml形式を採用していたりと世の中にはXML形式を採用しているものが沢山あります。そんなわけでObject をXML文字列に変換したり、XML文字列をObject へ戻したりできる様相互変換してみます。
using System.IO;
using System.Text;
using System.Xml.Serialization;
/// <summary>
/// オブジェクトをXML文字列に変換する
/// </summary>
public string ConvertObjectToXmlString(object _obj)
{
string result;
using (var ms = new MemoryStream())
{
XmlSerializer serializer = new XmlSerializer(_obj.GetType());
serializer.Serialize(ms, _obj);
result = Encoding.GetEncoding("utf-8").GetString(ms.GetBuffer());
}
return result;
}
/// <summary>
/// XML文字列をオブジェクトに変換する
/// </summary>
public T ConvertXmlStringToObject<T>(string _str)
{
byte[] bytes = Encoding.GetEncoding("utf-8").GetBytes(_str);
using (var ms = new MemoryStream(bytes))
{
XmlSerializer serializer = new XmlSerializer(typeof(T));
T obj = (T)serializer.Deserialize(ms);
return obj;
}
}
目次
使用例
public class Weappn
{
public int atk;
public int spd;
public override string ToString()
{
return string.Format($"atk={atk} spd={spd}");
}
}
var weapon = new Weappn();
weapon.atk = 10;
weapon.spd = 4;
// XML 文字列へ変換
var xmlString = ConvertObjectToXmlString(weapon);
Debug.Log(xmlString);
// Objectへ変換
var weaponObject = ConvertXmlStringToObject<Weappn>(xmlString);
Debug.Log(weaponObject.ToStirng());
結果
XML 文字列へ変換
<?xml version="1.0"?>
<Weappn xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<atk>10</atk>
<spd>4</spd>
</Weappn>
Object へ変換
atk=10 spd=4
正しく相互変換出来ていることを確認しました。