跳到主要内容

序列化覆写

序列化覆写(Serialization Override) 是一种高级特性,允许您以 非侵入性 的形式指定类型成员的序列化规则,这些规则以注册器的方式提供。

忽略指定成员的序列化

您可以通过定义一个继承自winS.Unity.Serialization.ISerializationIgnoreRegistrar的类型来提供指定成员的的序列化忽略:

using System.Collections.Generic;
using UnityEngine;
using winS.Unity;

public class Vector3SerializationIgnoreRegistrar : ISerializationIgnoreRegistrar
{
public IEnumerable<SerializationInfo> GetIgnoreInfo()
{
yield return SerializationInfo.Create<Vector3>("x");
}
}

上述代码要求序列化器忽略对UnityEngine.Vector3.x的序列化,即使它满足默认序列化规则。

强制指定成员的序列化

您可以通过定义一个继承自winS.Unity.Serialization.ISerializationIncludeRegistrar的类型来提供指定成员的的强制序列化:

using System.Collections.Generic;
using UnityEngine;
using winS.Unity;

public class RectSerializationIncludeRegistrar : ISerializationIncludeRegistrar
{
public IEnumerable<SerializationInfo> GetIncludeInfo()
{
yield return SerializationInfo.Create<Rect>("m_XMin", "m_YMin", "m_Width", "m_Height");
}
}

上述代码要求序列化器强制对UnityEngine.Rect的4个字段m_XMinm_YMinm_Widthm_Height进行序列化,即使它们不满足默认的序列化规则。

注册器如何工作

当您创建注册器后,winS for Unity 会在适当时机主动收集这些注册器,并将您请求的信息注册到内部。 在序列化时,序列化器会检查这些类型是否是您指定的类型,并执行这些规则。

优先级

需要注意的是,序列化覆写在内部拥有最高优先级,这意味着它们会无视特性winS.winML.WinMLIgnorewinS.winML.WinMLInclude