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# 序列化。然而,这不被分析器或源生成器支持。此外,像 UnionAttribute、MessagePackFormatter、SerializationConstructor 等功能无法使用。因此,我们建议在可能的情况下使用特定的 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;
        }
    }
}
相关推荐
暴走约伯7 分钟前
【VFX工具链源码拆解 03】告别机械劳动(下):材质字典映射批处理与智能纹理槽识别
unity·游戏引擎·材质
Wanda121424 分钟前
机器人与机电一体化3D数字孪生机器-Day9
人工智能·3d·unity·机器人·数字孪生
暴走约伯1 小时前
【VFX工具链源码拆解 01】总体架构:大型项目特效流程的程序化落地
开发语言·经验分享·3d·unity·架构·游戏引擎
平行云1 天前
建筑BIM/3D可视化轻量级实时评审与分享方案
unity·ue5·3dsmax·实时云渲染·云桌面·云游戏·建筑bim
2501_915106322 天前
Windows 上开发 Unity iOS,使用 KXBuild 进行真机调试、性能采样与打包 ipa
windows·vscode·unity·ios·个人开发·swift·敏捷流程
FFFFujige2 天前
【Unity】一个的Dots用Ruhanka踩坑记录
unity·游戏引擎
凯基迪科技3 天前
Unity游戏加密锁逆向方案、选型与攻防分析
游戏·unity·游戏引擎
阿松爱学习3 天前
【Unity开发】局部区域截图功能实现
unity·c#
淡海水3 天前
08-02-优化-LINQ与函数式编程的GC代价
unity·c#·.netcore·linq·gc
警醒与鞭策4 天前
Codex桌面版与Claude桌面版使用设置
android·unity·ai·性能优化