为什么 DateTime 在 Unity C# 中是 ISerializable returns false?

Why DateTime is ISerializable returns false in Unity C#?

我已经在多个 c# 版本中尝试了以下代码并且工作正常:

System.DateTime date = new System.DateTime (1024);
Console.Write (date is System.Runtime.Serialization.ISerializable);

输出:

True

但是当我 运行 它在 Unity 中时它 return 是错误的并且代码出错了:

System.DateTime date = new System.DateTime (1024);
UnityEngine.Debug.Log (date is System.Runtime.Serialization.ISerializable);

输出:

False

我想检测对象是否可序列化,然后继续使用 GetObjectData 方法对其进行序列化,但是当我在 Unity 的 DateTime 上尝试它时,它 returns false 而它应该 return true 因为 DateTime 正在实现 ISerializable。

Unity 使用 .NET 3.5 和 Mono(我不知道是哪个 mono 版本)。

代码在 .NET 4.5 中运行良好。

Try it online

https://docs.unity3d.com/Manual/script-Serialization.html 状态:

Serialization rules

Serializers in Unity run in a real-time game environment. This has a significant impact on performance. As such, serialization in Unity behaves differently to serialization in other programming environments. Outlined below are a number of tips on how to use serialization in Unity.

唉,Unity 不支持 DateTime 的序列化。

如果您需要 DateTime 序列化,那么您可能希望通过 ToFileTimeUtc and FromFileTimeUtc. Or implement custom serializationDateTime 保持同步的另一个 long 属性。