【Unity】Object を XML 文字列に変換する

DEVELOP, Unity

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

正しく相互変換出来ていることを確認しました。

スポンサーリンク

Posted by kazupon