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

DeepSeek教unity------MessagePack-04

Union  联合

MessagePack for C# 支持序列化接口类型和抽象类类型的对象。它的行为类似于 XmlInclude 或 ProtoInclude。在 MessagePack for C# 中,这些被称为Union。只有接口和抽象类可以被 Union 属性注解。需要唯一的联合键。

/****************************************************文件:Test_05.cs作者:Edision日期:#CreateTime#功能:示例5:Union
*****************************************************/using MessagePack;
using UnityEngine;public class Test_05 : MonoBehaviour
{public void Test(){//IUnionSample data = new FooClass() { XYZ = 999 };IUnionSample data = new BarClass() { OPQ = "BarClass" };// 序列化接口类型的对象。var bin = MessagePackSerializer.Serialize(data);// 再次反序列化。var reData = MessagePackSerializer.Deserialize<IUnionSample>(bin);// Use with e.g. type-switching in C# 7.0switch (reData){case FooClass x:Debug.Log(x.XYZ);break;case BarClass x:Debug.Log(x.OPQ);break;default:break;}}// 注解继承类型[Union(0, typeof(FooClass))][Union(1, typeof(BarClass))]public interface IUnionSample { }[MessagePackObject]public class FooClass : IUnionSample{[Key(0)]public int XYZ { get; set; }}[MessagePackObject]public class BarClass : IUnionSample{[Key(0)]public string OPQ { get; set; }}
}

联合在内部被序列化为两个元素的数组。

IUnionSample data = new BarClass { OPQ = "FooBar" };var bin = MessagePackSerializer.Serialize(data);// Union is serialized to two-length array, [key, object]
// [1,["FooBar"]]
Console.WriteLine(MessagePackSerializer.ConvertToJson(bin));

抽象类与接口运行方式一样

[Union(0, typeof(SubUnionType1))]
[Union(1, typeof(SubUnionType2))]
[MessagePackObject]
public abstract class ParentUnionType
{[Key(0)]public int MyProperty { get; set; }
}[MessagePackObject]
public class SubUnionType1 : ParentUnionType
{[Key(1)]public int MyProperty1 { get; set; }
}[MessagePackObject]
public class SubUnionType2 : ParentUnionType
{[Key(1)]public int MyProperty2 { get; set; }
}

请注意,你不能在派生类型中重复使用父类型中已经存在的相同键,因为内部将使用一个单一的扁平数组或映射,因此不能有重复的索引/键。

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

相关文章:

  • Java异常体系深度解析:从Exception到Error
  • 【linux】文件与目录命令 - ln
  • Xilinx kintex-7系列 FPGA支持PCIe 3.0 吗?
  • 无人机遥感技术在农业中的具体应用:株数和株高、冠层覆盖度、作物倒伏检测、叶面积指数、病虫害监测、产量估算、空间数据综合制图
  • 前端框架React知识回顾
  • 坑多多之ac8257 i2c1 rtc-pcf8563
  • webpack构建流程
  • React - 组件之props属性
  • PMTUD By UDP
  • Hutool - BloomFilter:便捷的布隆过滤器实现
  • 【学习资源】时间序列数据分析方法(1)
  • 盛铂科技SWFA100捷变频频率综合器:高性能国产射频系统的关键选择
  • 释放你的元数据:使用 Elasticsearch 的自查询检索器
  • 【快速幂算法】快速幂算法讲解及C语言实现(递归实现和非递归实现,附代码)
  • 3. 导入官方dashboard
  • 怎么理解 Spring Boot 的约定优于配置 ?
  • Dify 是什么?Dify是一个开源的LLM应用开发平台,支持快速搭建生成式AI应用,具有RAG管道、Agent功能、模型集成等特点
  • 数据预处理都做什么,用什么工具
  • windows蓝牙驱动开发-在蓝牙配置文件驱动程序中接受 L2CAP 连接
  • 【原理图PCB专题】自制汉字转码工具,适配Allgero 17版本 Skill
  • 欧拉公式在信号处理中的魔法:调幅信号的生成与频谱分析
  • 如何在Ubuntu中切换多个PHP版本
  • 基于opencv的HOG+角点匹配教程
  • Linux线程概念与线程操作
  • AI软件栈:LLVM分析(五)
  • Git指南-从入门到精通
  • Linux 文件系统挂载
  • Qt QSpinBox 总结
  • 【OJ项目】深入剖析题目接口控制器:功能、实现与应用
  • 周考考题(学习自用)