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

DeepSeek教unity------MessagePack-03

数据契约兼容性

你可以使用 [DataContract] 注解代替 [MessagePackObject]。如果类型用 DataContract 进行注解,可以使用 [DataMember] 注解代替 [Key],并使用 [IgnoreDataMember] 代替 [IgnoreMember]

然后,[DataMember(Order = int)] 的行为将与 [Key(int)] 相同,[DataMember(Name = string)][Key(string)] 相同,[DataMember][Key(nameof(member name))] 相同。

在共享库中使用 DataContract 可以使你的类/结构独立于 MessagePack for C# 序列化。然而,这不被分析器或源生成器支持。此外,像 UnionAttributeMessagePackFormatterSerializationConstructor 等功能无法使用。因此,我们建议在可能的情况下使用特定的 MessagePack for C# 注解。

序列化只读/不可变对象成员(SerializationConstructor)

MessagePack for C# 支持只读/不可变对象/成员的序列化。例如,这个结构体可以被序列化和反序列化。

/****************************************************
    文件:Test_04.cs
	作者:Edision
    日期:#CreateTime#
	功能:示例4:序列化只读/不可变对象成员
*****************************************************/

using MessagePack;
using UnityEngine;

public class Test_04 : MonoBehaviour
{
    public void Test()
    {
        var data = new Point(99, 9999);
        var bin = MessagePackSerializer.Serialize(data);
        Debug.Log($"【Test_04Logo】{MessagePackSerializer.ConvertToJson(bin)}");
        // 允许反序列化不可变对象。
        var point = MessagePackSerializer.Deserialize<Point>(bin);
        Debug.Log($"【Test_04Logo】{point.X}-{point.Y}");
    }

    [MessagePackObject]
    public struct Point
    {
        [Key(0)]
        public readonly int X;
        [Key(1)]
        public readonly int Y;

        [SerializationConstructor] //注解手动指定要使用的构造函数。
        public Point(int x)
        {
            this.X = x;
            this.Y = -1;
        }

        // 如果没有标记属性,则使用这个(最匹配的参数)。
        public Point(int x, int y)
        {
            this.X = x;
            this.Y = y;
        }
    }
}

相关文章:

  • ‌双非硕士的抉择:自学嵌入式硬件开发还是深入Linux C/C++走软开?
  • Deepseek 本地部署
  • Toast 弹窗的排查历程
  • 【MySQL 一 数据库基础】深入解析 MySQL 的索引
  • 第三届通信网络与机器学习国际学术会议(CNML 2025)
  • 讲解一下SpringBoot的RPC连接
  • 机器学习 - 特征学习(表示学习)
  • 【OJ项目】深入剖析题目接口控制器:功能、实现与应用
  • 【计算机毕业设计】Spring Boot教师人事档案管理系统功能说明
  • Python爬虫框架 - 实际项目(拿到可以直接用)
  • 中望CAD c#二次开发 ——VS环境配置
  • 【Getting Started】-数据结构介绍-Introduction to Data Structures
  • 异步加载和协程+Unity特殊文件夹
  • PySpark查询Dataframe中包含乱码的数据记录的方法
  • React Native之React整理(一)
  • K8s组件
  • 「软件设计模式」建造者模式(Builder)
  • Java--IO流详解(下)--相互转换(含Properties详解)
  • 强化 CSS 样式优先级的多种方法
  • Linux基础20-C语言篇之流程控制Ⅰ【入门级】
  • 印巴冲突升级,巴基斯坦股市重挫7.29%,创5年来最大单日跌幅
  • 习近平同俄罗斯总统普京举行会谈
  • 视频丨习近平主席出席俄方在机场举行的迎宾仪式
  • 首家股份行旗下AIC来了,兴银金融资产投资有限公司获批筹建
  • 马上评|持续对标国际一流,才有22项“全球最优”
  • 世界人形机器人运动会将在北京“双奥场馆”举行