上海网站设计价,青海企业网站制作,c 做注册网站,宁波网站推广外包服务动态反序列化
当调用 MessagePackSerializer.Deserializeobject 或 MessagePackSerializer.Deserializedynamic 时#xff0c;二进制数据中存在的任何值都将被转换为基本值#xff0c;即 bool、char、sbyte、byte、short、int、long、ushort、uint、ulong、…动态反序列化
当调用 MessagePackSerializer.Deserializeobject 或 MessagePackSerializer.Deserializedynamic 时二进制数据中存在的任何值都将被转换为基本值即 bool、char、sbyte、byte、short、int、long、ushort、uint、ulong、float、double、DateTime、string、byte[]、object[]、IDictionaryobject, 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.Deserializedynamic(blob, ContractlessStandardResolver.Options);//Debug.Log(deserializedModel[Name]); // foobar//Debug.Log(deserializedModel[Items][2]); // 100// 使用具体类型进行反序列化.var deserializedModel MessagePackSerializer.DeserializeDynamicModel(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.Deserializedynamic(blob, ContractlessStandardResolver.Options);//Debug.Log(deserializedModel[Name]); // foobar//Debug.Log(deserializedModel[Items][2]); // 100// 使用具体类型进行反序列化.var deserializedModel MessagePackSerializer.DeserializeDynamicModel(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};}}
}在反序列化时与动态未类型化反序列化相同。