C#XML与二进制相互转换-创新互联
                                            关于为什么需要转换:本人步入Game行业已经4年了,但是配置文件要麽是原生的XML文件,要麽是别人的二进制文件.关于配置文件为啥要转换成二进制文件:主要是为了保密,其次才是节省空间.但是话又说回来了,使用二进制文件的时候,获取信息,需要多一步转化过程.

再者,在一个Game项目中可能有多个配置文件,本人目前在开发的有100多个,那么打包成ini二进制是很有必要的.
来个例子:
XMLToBin : XML 与 二进制文件的相互转换
family.xml : XML文件
XMLToBin:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Xml.Serialization;
using System.Runtime.Serialization.Formatters.Binary;
namespace XmlToByte.ainy
{
    /// 
    /// XML的格式转换
    ///  
    public class XMLToBin
    {
        //public string a = "a";
        private static XMLToBin instance;
        public static XMLToBin Instance
        {
            get {
                if (XMLToBin.instance == null) {
                    XMLToBin.instance = new XMLToBin();
                }
                return XMLToBin.instance; 
            }
            set { XMLToBin.instance = value; }
        }
        public XMLToBin()
        {
            if (XMLToBin.instance != null)
            {
                InstanceNoInstantiationException exp =  new InstanceNoInstantiationException(typeof(XMLToBin));
                Console.WriteLine( exp.Message);
                throw exp;
            }
            else
            {
                XMLToBin.instance = this;
            }
        }
        /// 
        /// Object to XML
        ///  
        /// (object obj, string path)
        {
            FileStream xmlfile = new FileStream(path, FileMode.OpenOrCreate);
            //创建序列化对象 
            XmlSerializer xml = new XmlSerializer(typeof(T));
            try
            {    //序列化对象
                xml.Serialize(xmlfile, obj);
                xmlfile.Close();
            }
            catch (InvalidOperationException)
            {
                throw;
            }
            return true;
        }
        /// 
        /// XML to Object
        ///  
        /// (string path)
        {
            try
            {
                FileStream xmlfile = new FileStream(path, FileMode.Open);
                XmlSerializer xml = new XmlSerializer(typeof(T));
                T t = (T)xml.Deserialize(xmlfile);
                xmlfile.Close();
                return t;
            }
            catch (InvalidOperationException)
            {
                throw;
            }
            catch (FileNotFoundException)
            { throw; }
            finally
            {
            }
        }
        /// 
        /// Object to Bin
        ///  
        /// 
        /// 
        /// 
        /// Bin to Object
        ///  
        /// (string path)
        {
            try
            {
                FileStream binfile = new FileStream(path, FileMode.Open);
                BinaryFormatter bin = new BinaryFormatter();
                //序列化对象
                //xmlfile.Close();
                T t = (T)bin.Deserialize(binfile);
                binfile.Close();
                return t;
            }
            catch (InvalidOperationException)
            {
                throw;
            }
            catch (FileNotFoundException)
            { throw; }
            finally
            {
            }
        }
        /// 
        /// 读取文本
        ///  
        /// 
        ///    family.xml:
测试:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using XmlToByte.ainy;
namespace XmlToByte
{
    class Program
    {
        static void Main(string[] args)
        {
            string xml = XMLToBin.Instance.ReadCommon("../../res/family.xml");
            Console.WriteLine("family.xml : {0}", xml);
            Console.WriteLine("Message -- 转换成二进制文件成功:{0}", XMLToBin.Instance.BinarySerializer(xml, "../../res/family.ini"));
            //string json = "{peopel={ [ husband={ name=\"ainy\" , age = \"26\" }, wife={ name=\"snow\" , age = \"24\" } ] }}";
            //Console.WriteLine("Message -- 转换成二进制文件成功:{0}", XMLToBin.Instance.BinarySerializer(json, "../../res/familyJson.ini"));
            Console.WriteLine("family.ini : {0}", XMLToBin.Instance.ReadCommon("../../res/family.ini"));
            string aXml = XMLToBin.Instance.BinaryDeserializer("../../res/family.ini");
            Console.WriteLine("Message -- 转换成文本文件成功:{0}",aXml );
            Console.ReadKey();
        }
    }
} 注意到:其实Json和XML都可以.结果:

看结果,中文的话都改变了,英文还隐隐约约看得到配置信息.目前就这样了,毕竟中国游戏配置一大片都是中文的.另外还要感谢万能的技术论坛,一部分代码是看来自:http://www.cnblogs.com/jesszhu/archive/2013/08/22/3276556.html
如果读者有更好的方法,请不灵赐教.
附件:http://down.51cto.com/data/2367316另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
本文题目:C#XML与二进制相互转换-创新互联
新闻来源:http://www.scyingshan.cn/article/diihce.html

 建站
建站
 咨询
咨询 售后
售后
 建站咨询
建站咨询 
 