今天讲特别基础但是在混合开发中常用的数据传递,Json格式数据 的序列化和反序列化。我就以我做的3d音乐功能为例 定义: 1.基础类型
public class Communication
{
public long id;
public string data;
public Communication(long id=0, string data=null)
{
this.id = id;
this.data = data;
}
}
2.音乐类型
[Serializable]
public class MusicInfo
{
//localCoverPath:本地缓存的封面图片地址
//netCoverPath:封面图片的网络地址
//name:歌曲名
//author:歌曲作者
//state:歌曲播放状态,0为播放,1为暂停,如果只是单纯操作播放暂停,state之外其他字段可为空
public string localCoverPath;
public string netCoverPath;
public string name;
public string author;
public int state;
}
private static bool TryParse<T>(string json, out T t)
{
try
{
var data = JsonConvert.DeserializeObject<T>(json);
if (data != null)
{
t = data;
return true;
}
}
catch (Exception e)
{
Debug.LogWarning($"TryParse -> json:{json} | e:{e}");
}
t = default;
return false;
}
反序列化:
public void SetMusicInfo(string dataJson)
{
if (!TryParse<Communication>(dataJson, out var communication))
{
var errMsg = "SetMusicInfo: Invalid json -> " + dataJson;
Debug.Log(errMsg);
CallBackToAndroid.RequestCallBack(false, -1, errMsg);
return;
}
if (!TryParse<MusicInfo>(communication.data, out var musicInfo))
{
var errMsg = "SetMusicInfo: Invalid musicInfo -> " + dataJson;
Debug.Log(errMsg);
CallBackToAndroid.RequestCallBack(false, communication.id, errMsg);
return;
}
var musicSoundController = FindObjectOfType<MusicSoundController>();
if (musicSoundController == null)
{
var errMsg = "SetMusicInfo: musicSoundController not init -> " + dataJson;
Debug.Log(errMsg);
CallBackToAndroid.RequestCallBack(false, communication.id, errMsg);
return;
}
Debug.Log("SetMusicInfo -> " + dataJson);
musicSoundController.UpdateMusicInfo(musicInfo);
CallBackToAndroid.RequestCallBack(true, communication.id, "");
}
序列化:
var info = new MusicInfo()
{
author = "",
localCoverPath = "",
name = "",
netCoverPath = ""
};
var musicCommunication = new Communication()
{
id= 0,
data = JsonUtility.ToJson(info)
};
JsonUtility.ToJson(musicCommunication);