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;
        }
    }
}
相关推荐
_ZHOURUI_H_3 小时前
Unity EasyECS:并不是所有字段都适合 SoA,Unity 项目中应该怎样拆数据
游戏·unity·性能优化·架构·游戏引擎
TO_ZRG5 小时前
Unity 编辑器之 SettingsProvider、Hierarchy、Project、SearchField
java·unity·编辑器
yj爆裂鼓手13 小时前
spine绑定骨骼运动工具&spine纹理压缩自动设置工具
游戏·unity
惊鸿醉17 小时前
Unity 实战:用讯飞 WebAPI 做一个“说普通话、播方言“的语音程序
unity·c#·游戏引擎·语音识别
略略略咯咯18 小时前
C#Unity
开发语言·unity·c#
小贺儿开发1 天前
Unity 局域网遥控幻灯片展示工具 1.0
unity·网络通信·工具·ppt·控制·网页·互动
WarPigs1 天前
Unity未激活的物体无法响应事件?
java·unity·游戏引擎
玖玥拾2 天前
Unity3D RPG 入门项目(十一)主角完整战斗、怪物自动刷新、四大类型技能系统
游戏·3d·unity·游戏引擎
Behaviour2 天前
Unity AI 生态横评对比:官方 AI Beta / Unity CLI / 团结 Codely / 社区 MCP 四大阵营选型
人工智能·unity·ai·游戏引擎·aigc·ai编程
Madokaly2 天前
基类 DG.Tweening.Tween的源码解读
unity