Unity 的Json转换

今天讲特别基础但是在混合开发中常用的数据传递,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);

  • 9
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

俊24

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值