关于 .net:为什么 DateTime 是 ISerializable 在 Unity C# 中返回 false?

Why DateTime is ISerializable returns false in Unity C#?

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

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

输出:

1
True

但是当我在 Unity 中运行它时它返回 false 并且代码出错:

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

输出:

1
False

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

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

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

在线试用


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 序列化,那么您可能希望拥有另一个 long 属性,该属性通过 ToFileTimeUtcFromFileTimeUtcDateTime 保持同步。或者实现自定义序列化。