当前位置: 首页 > news >正文

DeepSeek教unity------MessagePack-05

动态反序列化

当调用 `MessagePackSerializer.Deserialize<object>` 或 `MessagePackSerializer.Deserialize<dynamic>` 时,二进制数据中存在的任何值都将被转换为基本值,即 bool、char、sbyte、byte、short、int、long、ushort、uint、ulong、float、double、DateTime、string、byte[]、object[]、IDictionary<object, object>。

/****************************************************文件:Test_06.cs作者:Edision日期:#CreateTime#功能:示例6:动态反序列化
*****************************************************/using MessagePack;
using MessagePack.Resolvers;
using UnityEngine;public class Test_06 : MonoBehaviour
{public void Test(){// 示例数据.var model = new DynamicModel { Name = "foobar", Items = new[] { 1, 10, 100, 1000 } };var blob = MessagePackSerializer.Serialize(model, ContractlessStandardResolver.Options);使用dynamic类型进行反序列化时,Unity环境未能正确处理C#的动态特性。//var deserializedModel = MessagePackSerializer.Deserialize<dynamic>(blob, ContractlessStandardResolver.Options);//Debug.Log(deserializedModel["Name"]); // foobar//Debug.Log(deserializedModel["Items"][2]); // 100// 使用具体类型进行反序列化.var deserializedModel = MessagePackSerializer.Deserialize<DynamicModel>(blob, MessagePack.Resolvers.ContractlessStandardResolver.Options);Debug.Log(deserializedModel.Name); // 输出: foobarDebug.Log(deserializedModel.Items[2]); // 输出: 100}[MessagePackObject]public class DynamicModel{[Key(0)]public string Name { get; set; }[Key(1)]public int[] Items { get; set; }public DynamicModel(){// 默认构造函数}public DynamicModel(string name, int[] items){Name = name;Items = items;}public override string ToString(){return $"Name: {Name}, Items: [{string.Join(", ", Items)}]";}}
}

Object 类型 序列化

StandardResolver 和 ContractlessStandardResolver 可以序列化对象/匿名类型对象。

/****************************************************文件:Test_06.cs作者:Edision日期:#CreateTime#功能:示例6:动态反序列化
*****************************************************/using MessagePack;
using MessagePack.Resolvers;
using UnityEngine;public class Test_06 : MonoBehaviour
{public void Test(){// 示例数据.var model = new DynamicModel { Name = "foobar", Items = new[] { 1, 10, 100, 1000 } };var blob = MessagePackSerializer.Serialize(model, ContractlessStandardResolver.Options);使用dynamic类型进行反序列化时,Unity环境未能正确处理C#的动态特性。//var deserializedModel = MessagePackSerializer.Deserialize<dynamic>(blob, ContractlessStandardResolver.Options);//Debug.Log(deserializedModel["Name"]); // foobar//Debug.Log(deserializedModel["Items"][2]); // 100// 使用具体类型进行反序列化.var deserializedModel = MessagePackSerializer.Deserialize<DynamicModel>(blob, ContractlessStandardResolver.Options);Debug.Log(deserializedModel.Name); // 输出: foobarDebug.Log(deserializedModel.Items[2]); // 输出: 100var objects = new object[] { 1, "aaa", new ObjectFieldType { Anything = 9999 } };var bin = MessagePackSerializer.Serialize(objects);// [1,"aaa",[9999]]Debug.Log(MessagePackSerializer.ConvertToJson(bin));// Support anonymous Type Serializevar anonType = new { Foo = 100, Bar = "foobar" };var bin2 = MessagePackSerializer.Serialize(anonType, ContractlessStandardResolverAllowPrivate.Options);// {"Foo":100,"Bar":"foobar"}Debug.Log(MessagePackSerializer.ConvertToJson(bin2));}[MessagePackObject]public class DynamicModel{[Key(0)]public string Name { get; set; }[Key(1)]public int[] Items { get; set; }public DynamicModel(){// 默认构造函数}public DynamicModel(string name, int[] items){Name = name;Items = items;}public override string ToString(){return $"Name: {Name}, Items: [{string.Join(", ", Items)}]";}}[MessagePackObject]public class ObjectFieldType{[Key(0)]public int Anything { get; set; }public ObjectFieldType(){// 默认构造函数}public ObjectFieldType(int anything){Anything = anything;}public override string ToString(){return $"Anything: {Anything}";}}
}

在反序列化时,与动态(未类型化)反序列化相同。

http://www.lryc.cn/news/537108.html

相关文章:

  • Kotlin 优雅的接口实现
  • 新的面试题CSS
  • DeepSeek R1打造本地化RAG知识库
  • 聚铭网络入围2025年度江苏省政府采购信息安全设备协议供货名单
  • 基于Flask的影视剧热度数据可视化分析系统的设计与实现
  • 【弹性计算】弹性计算的技术架构
  • python-leetcode 31.K个一组翻转链表
  • 算法08-递归调用转为循环的通用方法
  • [创业之路-300]:进一步理解货币与金钱, 货币与货币政策
  • 达梦:跟踪日志诊断
  • Qwen2-VL 的重大省级,Qwen 发布新旗舰视觉语言模型 Qwen2.5-VL
  • js考核第三题
  • LabVIEW袜品压力测试系统
  • jsp页面跳转失败
  • 1.推荐算法基本概念
  • Java 大视界 -- 大数据伦理与法律:Java 技术在合规中的作用与挑战(87)
  • 【ISO 14229-1:2023 UDS诊断全量测试用例清单系列:第十五节】
  • 【深度强化学习】策略梯度算法:REINFORCE
  • 手机用流量怎样设置代理ip?
  • CI/CD部署打包方法
  • LabVIEW 中dde.llbDDE 通信功能
  • 探索后端开发中的异步API:基于Resilience4j与Reactive Programming的高性能设计
  • leetcode 2915. 和为目标值的最长子序列的长度
  • 【Vue】打包vue3+vite项目发布到github page的完整过程
  • Flutter编译问题记录
  • poetry shell - 作为插件安装和使用
  • UE5中的快捷键汇总
  • 2月14(信息差)
  • ElementUI 的组件 Switch(开关)如何让文字显示在按钮上
  • Redis常用的五种数据结构详解