关于U3D里面XML读写办法,谢谢刘老师的指导(刘国栋)


代码:

/*
*Projectname:
*
*Author:
*
*Version:
*
*Description:
*
*/


usingUnityEngine;
usingSystem.Collections;
usingSystem.Xml;
usingSystem.Xml.Serialization;
usingSystem.IO;
usingSystem.Text;
usingSystem.Security.Cryptography;
usingSystem;
publicclassXmlSaver
{

privatestaticXmlSaver_Instance=null;
publicstaticXmlSaverGetInstance()
{
if(_Instance==null)
{
_Instance=newXmlSaver();
}
return_Instance;
}
//内容加密
publicstringEncrypt(stringtoE)
{
//加密和解密采用相同的key,具体自己填,但是必须为32位//
byte[]keyArray=UTF8Encoding.UTF8.GetBytes("12348578902223367877723456789012");
RijndaelManagedrDel=newRijndaelManaged();
rDel.Key=keyArray;
rDel.Mode=CipherMode.ECB;
rDel.Padding=PaddingMode.PKCS7;
ICryptoTransformcTransform=rDel.CreateEncryptor();

byte[]toEncryptArray=UTF8Encoding.UTF8.GetBytes(toE);
byte[]resultArray=cTransform.TransformFinalBlock(toEncryptArray,0,toEncryptArray.Length);

returnConvert.ToBase64String(resultArray,0,resultArray.Length);
}

//内容解密
publicstringDecrypt(stringtoD)
{
//加密和解密采用相同的key,具体值自己填,但是必须为32位//
byte[]keyArray=UTF8Encoding.UTF8.GetBytes("12348578902223367877723456789012");

RijndaelManagedrDel=newRijndaelManaged();
rDel.Key=keyArray;
rDel.Mode=CipherMode.ECB;
rDel.Padding=PaddingMode.PKCS7;
ICryptoTransformcTransform=rDel.CreateDecryptor();

byte[]toEncryptArray=Convert.FromBase64String(toD);
byte[]resultArray=cTransform.TransformFinalBlock(toEncryptArray,0,toEncryptArray.Length);

returnUTF8Encoding.UTF8.GetString(resultArray);
}

publicstringSerializeObject(objectpObject,System.Typety)
{
stringXmlizedString=null;
MemoryStreammemoryStream=newMemoryStream();
XmlSerializerxs=newXmlSerializer(ty);
XmlTextWriterxmlTextWriter=newXmlTextWriter(memoryStream,Encoding.UTF8);
xs.Serialize(xmlTextWriter,pObject);
memoryStream=(MemoryStream)xmlTextWriter.BaseStream;
XmlizedString=UTF8ByteArrayToString(memoryStream.ToArray());
returnXmlizedString;
}

publicobjectDeserializeObject(stringpXmlizedString,System.Typety)
{
XmlSerializerxs=newXmlSerializer(ty);
MemoryStreammemoryStream=newMemoryStream(StringToUTF8ByteArray(pXmlizedString));
XmlTextWriterxmlTextWriter=newXmlTextWriter(memoryStream,Encoding.UTF8);
returnxs.Deserialize(memoryStream);
}

//创建XML文件
publicvoidCreateXML(stringfileName,stringthisData)
{
//stringxxx=Encrypt(thisData);
stringxxx=thisData;
StreamWriterwriter;
writer=File.CreateText(fileName);
writer.Write(xxx);
writer.Close();
}

//读取XML文件
publicstringLoadXML(stringfileName)
{
StreamReadersReader=File.OpenText(fileName);
stringdataString=sReader.ReadToEnd();
sReader.Close();
//stringxxx=Decrypt(dataString);
stringxxx=dataString;
returnxxx;
}

//判断是否存在文件
publicboolhasFile(StringfileName)
{
returnFile.Exists(fileName);
}
publicstringUTF8ByteArrayToString(byte[]characters)
{
UTF8Encodingencoding=newUTF8Encoding();
stringconstructedString=encoding.GetString(characters);
return(constructedString);
}

publicbyte[]StringToUTF8ByteArray(StringpXmlString)
{
UTF8Encodingencoding=newUTF8Encoding();
byte[]byteArray=encoding.GetBytes(pXmlString);
returnbyteArray;
}
}

后面是加载数据:


代码:


usingUnityEngine;
usingSystem.Collections;
usingSystem.Collections.Generic;
publicstaticclassDataLoadTest{
publicstaticList<Data>LevelData=newList<Data>();
//staticstring_fileName=Application.dataPath+"/Resource/gamedata";
staticstring_fileName=Application.persistentDataPath+"/gamedata";
publicstaticvoidSave()
{
strings=XmlSaver.GetInstance().SerializeObject(LevelData,typeof(List<Data>));
XmlSaver.GetInstance().CreateXML(_fileName,s);
}
publicstaticvoidLoad()
{
try{
strings=XmlSaver.GetInstance().LoadXML(_fileName);
LevelData=XmlSaver.GetInstance().DeserializeObject(s,typeof(List<Data>))asList<Data>;
}
catch{
TraverseList();
Save();
strings=XmlSaver.GetInstance().LoadXML(_fileName);
LevelData=XmlSaver.GetInstance().DeserializeObject(s,typeof(List<Data>))asList<Data>;
}

}
publicstaticvoidTraverseList()
{
List<ScrollData>everyScrollData=newList<ScrollData>();
everyScrollData.Add(newScrollData(false,"挖掘机学校哪家强"));
everyScrollData.Add(newScrollData(false,"中国山东找蓝翔"));
everyScrollData.Add(newScrollData(false,"我特喵的只是开发者用来测试的"));

everyScrollData.Add(newScrollData(false,"有我所不乐意的,在天堂里,我不愿意去;有我所不乐意的,在地狱里,我不愿意去;有我所不乐意的,在你们的世界里,我不愿意去。"));
everyScrollData.Add(newScrollData(false,"我只愿蓬勃生活在此时此刻,无所谓去哪,无所谓见谁。那些我将要去的地方,都是我从未谋面的故乡;那些我将要见的人,都会成为我的朋友。"));
everyScrollData.Add(newScrollData(false,"以前是以前,现在是现在。我不能选择怎么生,怎么死;但我能决定怎么爱,怎么活。这是我要的自由,我的黄金时代。"));

everyScrollData.Add(newScrollData(false,"栈和队列的区别是啥?"));
everyScrollData.Add(newScrollData(false,"吃多了拉就是队列;"));
everyScrollData.Add(newScrollData(false,"吃多了吐就是栈"));

everyScrollData.Add(newScrollData(false,"壮岁旌旗拥万夫,锦襜突骑渡江初。燕兵夜娖银胡簶,汉箭朝飞金仆姑。"));
everyScrollData.Add(newScrollData(false,"追往事,叹今吾,春风不染白髭须。"));
everyScrollData.Add(newScrollData(false,"却将万字平戎策,换得东家种树书。"));

everyScrollData.Add(newScrollData(false,"第一天,小白兔去河边钓鱼,什么也没钓到,回家了。"));
everyScrollData.Add(newScrollData(false,"第二天,小白兔又去河边钓鱼,还是什么也没钓到,回家了。"));
everyScrollData.Add(newScrollData(false,"第三天,小白兔刚到河边,一条大鱼从河里跳出来,冲着小白兔大叫:你他妈的要是再敢用胡箩卜当鱼饵,我就扁死你!"));

everyScrollData.Add(newScrollData(false,"程序员的读书历程:x语言入门—>x语言应用实践—>x语言高阶编程—>"));
everyScrollData.Add(newScrollData(false,"x语言的科学与艺术—>编程之美—>编程之道—>"));
everyScrollData.Add(newScrollData(false,"编程之禅—>颈椎病康复指南—>精神病康复指南"));

everyScrollData.Add(newScrollData(false,"在一个精神病院里,有一天院长想看看三个精神病人的恢复情况如何,于是在他们每人面前放了一只小白兔。第一个精神病人坐在小白兔的上面,揪着小白兔的两只耳朵,