瓷砖网站源码,怎么制作网页教程,网络设计解决如何将初步规划中的各个子系统从内部用,wordpress lensnewsUnion 联合
MessagePack for C# 支持序列化接口类型和抽象类类型的对象。它的行为类似于 XmlInclude 或 ProtoInclude。在 MessagePack for C# 中#xff0c;这些被称为Union。只有接口和抽象类可以被 Union 属性注解。需要唯一的联合键。
/******************************…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.DeserializeIUnionSample(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; }
}
请注意你不能在派生类型中重复使用父类型中已经存在的相同键因为内部将使用一个单一的扁平数组或映射因此不能有重复的索引/键。