EllanJiang/GameFramework · error · GameFrameworkException

Deserialize read-write version list failure.

Error message

Deserialize read-write version list failure.

What it means

Thrown when the read-write version list bytes cannot be deserialized or the resulting LocalVersionList has IsValid == false. The framework treats a corrupt sandbox version list as fatal for the update/check flow.

Solutions

  1. Delete the read-write version list from the persistent data path so it is re-generated/re-downloaded
  2. Regenerate the list with the matching ResourceBuilder/serializer
  3. Ensure ReadWriteVersionListSerializer matches the serialization format actually used
  4. Check disk space and write integrity in the sandbox area

Example fix

// before: stale corrupt list used blindly
checker.CheckResources();
// after: clear sandbox list when format version changed
if (storedFormatVersion != currentFormatVersion) File.Delete(rwVersionListPath);
checker.CheckResources();
Defensive patterns

Strategy: validation

Validate before calling

var fi = new FileInfo(rwVersionListPath);
if (!fi.Exists || fi.Length == 0 || fi.Length < minimumExpectedSize) File.Delete(rwVersionListPath); // force rebuild

Try / catch

try { checker.CheckResources(); }
catch (GameFrameworkException ex) when (ex.Message.Contains("Deserialize read-write version list failure")) { DeleteSandboxVersionList(); RestartCheck(); }

Prevention

When it happens

Trigger: m_ResourceManager.m_ReadWriteVersionListSerializer.Deserialize(memoryStream) returns an invalid list, or versionList.IsValid is false — bad bytes written to the read-write area or serializer mismatch.

Common situations: Interrupted previous update left a truncated read-write version list on disk; serializer type changed between app versions; file written by a different framework build; storage corruption on the device.

Understand the failure class

Background: Schema validation failed / invalid input schema: payload rejected because its shape doesn't match the expected schema — this error's family across 28 libraries.

Related errors


AI-assisted analysis of EllanJiang/GameFramework@d0c010b051 (2026-09-15). Data as JSON: /api/errors/f8d1d1085ea3932c. Report an issue: GitHub.

Appendix: source

Thrown at GameFramework/Resource/ResourceManager.ResourceChecker.cs:450

                m_ReadOnlyVersionListReady = true;
                RefreshCheckInfoStatus();
            }

            private void OnLoadReadWriteVersionListSuccess(string fileUri, byte[] bytes, float duration, object userData)
            {
                if (m_ReadWriteVersionListReady)
                {
                    throw new GameFrameworkException("Read-write version list has been parsed.");
                }

                MemoryStream memoryStream = null;
                try
                {
                    memoryStream = new MemoryStream(bytes, false);
                    LocalVersionList versionList = m_ResourceManager.m_ReadWriteVersionListSerializer.Deserialize(memoryStream);
                    if (!versionList.IsValid)
                    {
                        throw new GameFrameworkException("Deserialize read-write version list failure.");
                    }

                    LocalVersionList.Resource[] resources = versionList.GetResources();
                    LocalVersionList.FileSystem[] fileSystems = versionList.GetFileSystems();

                    foreach (LocalVersionList.FileSystem fileSystem in fileSystems)
                    {
                        int[] resourceIndexes = fileSystem.GetResourceIndexes();
                        foreach (int resourceIndex in resourceIndexes)
                        {
                            LocalVersionList.Resource resource = resources[resourceIndex];
                            SetCachedFileSystemName(new ResourceName(resource.Name, resource.Variant, resource.Extension), fileSystem.Name);
                        }
                    }

                    foreach (LocalVersionList.Resource resource in resources)
                    {
                        SetReadWriteInfo(new ResourceName(resource.Name, resource.Variant, resource.Extension), (LoadType)resource.LoadType, resource.Length, resource.HashCode);

View on GitHub (pinned to d0c010b051)