Unity3D中的序列化特性和DLL特性

[DllImport ("****")]:
在Unity中引用外部DLL的主要目的是为了方便集成一些外部插件,以便调用现有的动态链接库
表示外部DLL使用的是非托管语言,例如C/C++,当Unity端需要和IOS端进行信息交互时,就需要用到该特性
#if UNITY_IOS
    [DllImport ("_countryCode")]//调用IOS端的countryCode方法
#endif
如果DLL使用的是托管语言,一般只需要将目标DLL放在Assets目录下的Plugins目录即可在游戏中调用,则直接在Unity端引用即可: using DLLTest;
namespace DLLTest{
    public class MyUtilities{
        public static void print(){
            Debug.Log("aaa");
        }
    }
}
[Serializable]特性:
用来告诉格式化程序一个类型的实例的字段可以进行序列化和反序列化操作
序列化可被定义为将对象的状态存储到存储媒介中的过程。在此过程中,对象的公共字段和私有字段以及类的名称(包括该类的程序集)都被转换为字节流,然后写入数据流。在以后反序列化该对象时,创建原始对象的精确副本。
  序列化有两个最重要的功能:一个时将对象的状态保持在存储媒体中,以便可以在以后重新创建精确的副本;另一个是通过值将对象从一个应用程序域发送到另有一个应用程序域中。例如,序列化可用于在ASP.NET中保存会话状态并将对象复制到Windows窗体的剪贴板中。远程处理还可以试用序列化通过将对象从一个程序域传递到另一个应用程序域中。
序列化分类
1) 二进制序列化
  这种序列化可以保持类型不变,即可以在应用程序的不同调用之间保留对象的状态。
string fileName = "E:/UnityProject/Three Remove/Assets/serializableTest.dat";//定义字节流文件保存路径
SerializableTest serializableTest = new SerializableTest("张三", 23 , "1997-12-15");
public void Serizalize(){
    Stream stream = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite);//写入
    BinaryFormatter binaryFormatter = new BinaryFormatter();//创建二进制序列化器
    binaryFormatter.Serialize(stream, serializableTest);
    stream.Close();
    serializableTest.name = "李四";
}   
public void Deserialize(){
    Stream stream = new FileStream(fileName, FileMode.Open, FileAccess.Read);//读取
    BinaryFormatter binaryFormatter = new BinaryFormatter();//创建二进制序列化器
    serializableTest = binaryFormatter.Deserialize(stream) as SerializableTest;
    stream.Close();
    Debug.Log(serializableTest.name);//张三
    Debug.Log(serializableTest.age);//默认值0
}

/// <summary>
/// 序列化测试
/// </summary>
[Serializable]
public class SerializableTest{
    public string name;
    [NonSerialized]//表示不序列化该字段
    public int age;
    public string birthday;

    public SerializableTest(string name,int age,string birthday){
        this.name = name;
        this.age = age;
        this.birthday = birthday;
    }
}
2)XML 和SOAP 序列化(XML序列化时必须要有空参构造方法)
  这种序列化仅序列化公共属性和字段,不保存类型。
这种操作一般用于将对象转换为网络中容易传输的格式。例如,可以序列化一个对象,然后使用HTTP 通过Internet 在客户端和服务器之间传输该对象。在另一端,通过反序列化重新构造对象。
string xmlFileName = "E:/UnityProject/Three Remove/Assets/serializableTest.xml";
SerializableTest serializableTest = new SerializableTest("张三", 23 , "1997-12-15");
public void Serizalize(){
    XmlSerializer xmlSerializer = new XmlSerializer(typeof(SerializableTest));
    Stream xmlStream = new FileStream(xmlFileName, FileMode.Create, FileAccess.ReadWrite);//写入
    xmlSerializer.Serialize(xmlStream, serializableTest);
    xmlStream.Close();
}   
public void Deserialize(){
    XmlSerializer xmlSerializer = new XmlSerializer(typeof(SerializableTest));
    Stream xmlStream = new FileStream(xmlFileName, FileMode.Open, FileAccess.Read);//写入
    serializableTest = xmlSerializer.Deserialize(xmlStream) as SerializableTest;
    xmlStream.Close();
    Debug.Log(serializableTest.Name);
}

/// <summary>
/// 序列化测试
/// </summary>
[Serializable]
public class SerializableTest{
    public string name;
    [NonSerialized]//表示不序列化该字段
    public int age;
    public string birthday;

    public SerializableTest(string name,int age,string birthday)
    {
        this.name = name;
        this.age = age;
        this.birthday = birthday;
    }

    public SerializableTest() {
    }
}

3)Json序列化

相对比较简单,转换时只需要注意Json的格式就行.
 
原文地址:https://www.cnblogs.com/tqw1215/p/13352674.html