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

news2025/2/19 15:23:52

动态反序列化

当调用 `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); // 输出: foobar
        Debug.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); // 输出: foobar
        Debug.Log(deserializedModel.Items[2]); // 输出: 100


        var 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 Serialize
        var 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.coloradmin.cn/o/2299042.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SQL Query美化

推荐一个可以美化Query的网站&#xff01; 名称&#xff1a;SQL formatter | Online free SQL Beautifier 地址&#xff1a;https://sqlformatter.org/# 在处理 SQL 查询语句时&#xff0c;可读性是至关重要的。 杂乱无章的 SQL代码不仅难以理解&#xff0c;还会给后续的维…

2025 docker可视化管理面板DPanel的安装

1.什么是 DPanel &#xff1f; DPanel 是一款 Docker 可视化管理面板&#xff0c;旨在简化 Docker 容器、镜像和文件的管理。它提供了一系列功能&#xff0c;使用户能够更轻松地管理和部署 Docker 环境。 软件特点&#xff1a; 可视化管理&#xff1a;提供直观的用户界面&#…

mapbox V3 新特性,添加下雪效果

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;mapbox 从入门到精通 文章目录 一、&#x1f340;前言1.1 ☘️mapboxgl.Map 地图对象…

【STM32】H743的以太网MAC控制器的一个特殊功能

调试743的MAC&#xff0c;翻阅手册的时候&#xff0c;发现了一个有意思的功能 混杂模式 H743的MAC控制器&#xff0c;可以设置为混杂模式&#xff0c;这就意味着它可以做一些网络监控的应用&#xff0c;譬如连接具备端口镜像功能的交换机&#xff0c;然后直接代替PC实现网络数据…

WEB攻防-第60天:PHP反序列化POP链构造魔术方法流程漏洞触发条件属性修改

目录 一、序列化与反序列化基础 1.1 什么是序列化与反序列化 二、魔术方法的生命周期 2.1 常见的魔术方法 2.2 模式方法的生命周期触发调用 2.2.1 __construct() 2.2.2 __destruct() 2.2.3 __sleep() 2.2.4 __wakeup() 2.2.5 __invoke() 2.2.6 __toS…

二、交换机的vlan子设备接入

一、交换机的vlan设置-CSDN博客 二、交换机的vlan子设备接入-CSDN博客 接上篇的文章&#xff0c;本文接入了子设备 网络结构如下&#xff1a; 用路由器A和POE交换机B代替第一篇中的笔记本电脑&#xff0c;路由器A和交换机B都关闭DHCP服务&#xff0c;并分别接入一个IPC&#…

Spring IoC的实现机制是什么?

大家好&#xff0c;我是锋哥。今天分享关于【Spring IoC的实现机制是什么&#xff1f;】面试题。希望对大家有帮助&#xff1b; Spring IoC的实现机制是什么&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Spring IoC&#xff08;Inversion of Control…

配置mysql8.0使用PXC实现高可用。

准备好下面三台服务器 cat >> /etc/hosts << EOF 192.168.1.11 pxc1 192.168.1.12 pxc2 192.168.1.13 pxc3 EOF 三台服务器同时进行&#xff0c;下载安装包 [rootlocalhost ~]#yum module disable mysql [rootlocalhost ~]#yum ins…

对openharmony HDF驱动框架的C/S设计模式和单例类的说明

在分析openharmony的HDF驱动框架时我们会发现用了很多面向对象的思想&#xff0c;例如类继承、接口、单例类等&#xff0c;本来应该是好事情&#xff0c;**但使用时对象之间的关系交错复杂&#xff0c;不太符合linux内核分层分模块的思路&#xff0c;导致整体理解起来比较困难&…

vue学习10

1.GPT和Copilot Copilot Tab接受 删除键&#xff0c;不接受 ctrlenter更多方案 更适合的是修改方向 const submitForm async () > {//等待校验结果await formRef.value.validate()//提交修改await userUpdateInfoService(form.value)//通知user模块&#xff0c;进行数据更…

如何正确安装Stable Diffusion Web UI以及对应的xFormers

本文是我总结的步骤&#xff0c;验证了几次保证是对的。因为正确的安装 Stable Diffusion Web UI 以及对应的 xFormers 实在是太麻烦了&#xff0c;官方和网上的步骤都是残缺和分散的&#xff0c;加上国内网络速度不理想&#xff0c;所以需要一些额外步骤&#xff0c;之前研究出…

DeepSeek正重构具身大模型和人形机器人赛道!

中国人工智能公司DeepSeek&#xff08;深度求索&#xff09;以“低成本、高效率、强开放”的研发范式横空出世&#xff0c;火遍并震撼全球科技圈&#xff1b;DeepSeek展现出来的核心竞争力&#xff0c;除了低成本及推理能力&#xff0c;更重要的是开源模型能力追赶上了最新的闭…

Linux库制作与原理:【静态库】【动态库】【目标文件】【ELF文件】【ELF从形成到假造轮廓】【理解链接和加载】

目录 一.什么是库 二.静态库 2.1创建静态库 我们在之前的路径下新建lib使用我们自己的库 2.2 使用makefile生成静态库 三.动态库 3.1动态库生成 3.2动态库使用 3.3库运行搜索路径 四.目标文件 五.ELF文件 六.ELF从形成到加载轮廓 6.1ELF形成可执行 6.2 ELF可执行文…

【ubuntu24.04】 强制重启导致大模型的磁盘挂载出错

挂载NTFS文件系统出错 各种模型放在了这个机械硬盘上&#xff0c;虽然速度慢&#xff0c;但是好在容量大。大模型在工作&#xff0c;但是程序看起来有问题&#xff0c;导致系统卡死了&#xff0c;然后我重启了&#xff0c;然后报错&#xff1a;wrong fs type bad option &…

Spring Boot(8)深入理解 @Autowired 注解:使用场景与实战示例

搞个引言 在 Spring 框架的开发中&#xff0c;依赖注入&#xff08;Dependency Injection&#xff0c;简称 DI&#xff09;是它的一个核心特性&#xff0c;它能够让代码更加模块化、可测试&#xff0c;并且易于维护。而 Autowired 注解作为 Spring 实现依赖注入的关键工具&…

【linux】在 Linux 服务器上部署 DeepSeek-r1:70b 并通过 Windows 远程可视化使用

【linux】在 Linux 服务器上部署 DeepSeek-r1:70b 并通过 Windows 远程可视化使用 【承接商业广告,如需商业合作请+v17740568442】 文章目录 【linux】在 Linux 服务器上部署 DeepSeek-r1:70b 并通过 Windows 远程可视化使用个人配置详情一、安装ollama二、下载deepseek版本…

【AI大模型】Ollama部署本地大模型DeepSeek-R1,交互界面Open-WebUI,RagFlow构建私有知识库

文章目录 DeepSeek介绍公司背景核心技术产品与服务应用场景优势与特点访问与体验各个DeepSeek-R系列模型的硬件需求和适用场景 Ollama主要特点优势应用场景安装和使用配置环境变量总结 安装open-webui下载和安装docker desktop配置镜像源安装open-webui运行和使用 RagFlow介绍主…

Unity 命令行设置运行在指定的显卡上

设置运行在指定的显卡上 -force-device-index

Visual Studio 使用 “Ctrl + /”键设置注释和取消注释

问题&#xff1a;在默认的Visual Studio中&#xff0c;选择单行代码后&#xff0c;按下Ctrl /键会将代码注释掉&#xff0c;但再次按下Ctrl /键时&#xff0c;会进行双重注释&#xff0c;这不是我们想要的。 实现效果&#xff1a;当按下Ctrl /键会将代码注释掉&#xff0c;…

教程:使用 Vue 3 和 arco 实现表格合并

1. 功能概述 本教程将介绍如何使用 Vue 3 和 arco 组件库实现表格合并功能。具体来说&#xff0c;我们会根据表格数据中的某个字段&#xff08;如 type&#xff09;对表格的某一列&#xff08;如入库类型列&#xff09;进行合并&#xff0c;同时将质检说明列合并为一列。 2. …