我正在尝试用嵌套类、AudioClip 和 texture2D 序列化一个巨大的类。我实现了 ISerializable 接口并用 SerializableAttribute 标记了所有类。我使用 JsonUtility 转换为 Json 并返回。
除了 Textures2D、Textures2D[] 和 AudioClip 之外,一切都运行良好。ISerializable 方法的实现如下:
[Serializable]
public class Illustration : ISerializable
{
public Texture2D Image = new Texture2D(256, 256);
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue(nameof(Image), Image.EncodeToPNG(), typeof(byte[]));
}
private Illustration(SerializationInfo info, StreamingContext context)
{
Image.LoadImage(info.GetValue(nameof(Image), typeof(byte[])) as byte[]);
}
}
[Serializable]
public class CustomAnimation : ISerializable
{
public Texture2D[] Images;
public void GetObjectData(SerializationInfo info, StreamingContext context)
{
info.AddValue(nameof(Images), Images.Select(x => x.EncodeToPNG()).ToArray(), typeof(byte[][]));
}
private CustomAnimation(SerializationInfo info, StreamingContext context)
{
var textures = info.GetValue(nameof(Images), typeof(byte[][])) as byte[][];
if (textures != null)
{
var imagesAndTextures = Images.Zip(textures, (i, t) => new {Images = i, textures = t});
foreach (var it in imagesAndTextures)
{
it.Images.LoadImage(it.textures);
}
}
}
}
我希望这段代码能用纹理的字节数组制作一个 JSON,但我得到了这个:
"Illustrations": [
{
"Image": {
"instanceID": 34540
}
}
]
为什么我有这个 instanceID?然后我需要二进制纹理将其保存在文本文件中。它不是运行时对象。