public static object Deserialize(byte[] bytes) { MyCustomSerialization data = new MyCustomSerialization(); //MyNumber. byte[] myNumberBytes = new byte[4]; Array.Copy(bytes, 0, myNumberBytes, 0, myNumberBytes.Length); if (BitConverter.IsLittleEndian) { Array.Reverse(myNumberBytes); } data.MyNumber = BitConverter.ToInt32(myNumberBytes, 0); //MyString. byte[] myStringBytes = new byte[bytes.Length - 4]; if (myStringBytes.Length > 0) { Array.Copy(bytes, 4, myStringBytes, 0, myStringBytes.Length); if (BitConverter.IsLittleEndian) { Array.Reverse(myStringBytes); } data.MyString = Encoding.UTF8.GetString(myStringBytes); } else { data.MyString = string.Empty; } return(data); }
/// <summary> /// Sends an instance of MyCustomSerialization. /// </summary> /// <param name="data"></param> /// <param name="typed"></param> private void SendCustomSerialization(MyCustomSerialization data, bool typed) { if (!typed) { base.photonView.RPC("RPC_ReceiveMyCustomSerialization", RpcTarget.AllViaServer, MyCustomSerialization.Serialize(_customSerialization)); } else { base.photonView.RPC("RPC_TypedReceiveMyCustomSerialization", RpcTarget.AllViaServer, _customSerialization); } }
public static byte[] Serialize(object obj) { MyCustomSerialization data = (MyCustomSerialization)obj; byte[] myNumberBytes = BitConverter.GetBytes(data.MyNumber); if (BitConverter.IsLittleEndian) { Array.Reverse(myNumberBytes); } byte[] myStringBytes = Encoding.ASCII.GetBytes(data.MyString); if (BitConverter.IsLittleEndian) { Array.Reverse(myStringBytes); } return(JoinBytes(myNumberBytes, myStringBytes)); }
private void RPC_TypedReceiveMyCustomSerialization(MyCustomSerialization datas) { print("Received typed: " + datas.MyNumber + ", " + datas.MyString); }
private void RPC_ReceiveMyCustomSerialization(byte[] datas) { MyCustomSerialization result = (MyCustomSerialization)MyCustomSerialization.Deserialize(datas); print("Received byte array: " + result.MyNumber + ", " + result.MyString); }