Не получается перевести Texture2D в JSON

Возникла такая проблема, пытаюсь сделать JSON из структуры с нужными мне параметрами. Это нужно для сохранения, записываю JSON в файлик. Но у меня еще нужно сохранить скриншот, который у меня в Texture2D... Знаю знаю, решение сохранять картинки таким способом капец какой костыль.. Но мне хотелось сделать сохранение именно одним файлом.

Раньше я использовал UnityEngine.JsonUtility, и чтобы сохранить скрин переводил его в биты таким вот способом:

public struct Subsave
{
    public string SaveTime;

    /// Screenshot
    public byte[] Screenshot_Data;
    public Vector2Int Screenshot_Size;
    public Texture2D Screenshot
    {
        get
        {
            Texture2D tex = new Texture2D(Screenshot_Size.x, Screenshot_Size.y);
            tex.LoadImage(Screenshot_Data);
            return tex;
        }
    }

    public Subsave(
        string saveTime,
        Texture2D screenshot)
    {
        SaveTime = saveTime;

        Screenshot_Data = screenshot.EncodeToPNG();
        Screenshot_Size = new Vector2Int(screenshot.width, screenshot.height);
    }
}

сериализация:

Subsave subsave = new Subsave(
        saveTime.ToString("G"),
        ScreenCapture.CaptureScreenshotAsTexture());
string json = JsonUtility.ToJson(subsave);

и десериализация:

Subsave subsave = JsonUtility.FromJson<Subsave>(json);

И все работает отлично, но проблема в том что UnityEngine.JsonUtility не работает с обычными многомерными массивами, что мне было критично и я вспомнил что есть ассет Json Net for Unity (Newtonsoft.Json).

Когда то давно я как то подружил этот ассет с Texture2D, но это было очень очень давно и я не могу вспомнить как.

Что я пробовал:

  1. Я пробовал записывать так же в битовый массив, как в решении выше только используя ассетные сериализаторы, в этом случае в самом джисоне оно выглядит странно, а десериализовать это не получается:

    string json = JsonConvert.SerializeObject(subsave);
    ...
    Subsave subsave = JsonConvert.DeserializeObject<Subsave>(json);
    // или так, один фиг не работает...
    Subsave subsave = (Subsave)JsonConvert.DeserializeObject(json);
    

В решении с UnityEngine.JsonUtility битовый массив в джисоне выглядел как последовательность битов { 123, 123, 123... }, а в варианте с Newtonsoft.Json оно выглядит как набор символов "iVBORw0KGgoAAAANSUhEUgAAB4AAAAQ4CAYAAADo08FD..." Может по этому, что то я тут не так сделал?

  1. Пробовал сериализовать прям Texture2D но оно записывает в JSON только его параметры без самой текстуры и десериализовать тоже не хочет.

Подскажите как бы сохранить скрин таким образом? И да да знаю я, костыль капец...


Ответы (1 шт):

Автор решения: Kurwo Attano

Решал я это несколько дней, но стоило мне написать этот вопрос, как все само по себе решилось..

Оно не хотело десериализоваться потому что геттер скриншота, который переводит биты обратно в скриншот, должен был быть отмечен атрибутом [JsonIgnore].

Хотя странно что оно пытается его десериализовать...

Вопрос закрыт

→ Ссылка