欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 房产 > 家装 > DeepSeek教unity------MessagePack-05

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

2025/6/27 11:50:54 来源:https://blog.csdn.net/Edision_li/article/details/145632516  浏览:    关键词: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}";}}
}

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词