как загрузить json для windows build unity

Я пробовал много решений, но никто не работает в моем случае, мой вопрос прост, но я не могу найти ответ специально для сборки Windows. Я попытался загрузить постоянную форму json, потоковая передача и ресурс все хорошо работают в Android, но никакое решение не работает для сборки Windows. вот мой код, пожалуйста, помогите мне.

public GameData gameData;
    private void LoadGameData()
    {
        string path = "ItemsData";
        TextAsset targetFile = Resources.Load<TextAsset>(path);
        string json = targetFile.text;
        gameData = ResourceHelper.DecodeObject<GameData>(json);
        //  gameData = JsonUtility.FromJson<GameData>(json);
        print(gameData.Items.Count);
}

вот мой класс данных

[Serializable]
public class GameData
{
    [SerializeField]
    public List<Item> Items;


    public GameData()
    {
        Items = new List<Item>();
    }
}

public class Item
{
    public string Id;
    public string[] TexturesArray;

    public bool Active;

    public Item()
    {
    }
    public Item(string _id, string[] _textureArray ,  bool _active = true)
    {
        Id = _id;
        TexturesArray = _textureArray;
        Active = _active;
    }
}

person Samra Khan    schedule 19.11.2019    source источник
comment
Вы получаете какие-либо ошибки?   -  person Remy    schedule 19.11.2019
comment
как насчет JsonUtility.FromJson? Примечание Item должно быть [Serializable]!   -  person derHugo    schedule 19.11.2019
comment
Используйте либо встроенную JsonUtility единства, либо используйте json.net (он находится в хранилище активов). Оба довольно хороши, последний позволяет использовать более продвинутые вещи.   -  person Jichael    schedule 19.11.2019
comment
Вы можете поделиться частью вашего json?   -  person Innat3    schedule 19.11.2019
comment
Вы можете использовать данные GameData = JObject.Parse(StringJson).ToObject‹GameData›();   -  person cbalakus    schedule 19.11.2019
comment
нет, ошибка.. помогите пожалуйста   -  person Samra Khan    schedule 19.11.2019
comment
вот мой json   -  person Samra Khan    schedule 19.11.2019
comment
{ Items: [ {Id: Cube, TexturesArray: [T1, T2, T3], Active: true}, { Id: Ground, TexturesArray: [Tile_Mexican_basecolor, 11_16_1_d, Ground_Rain_basecolor], Active: true}, { Id: Frame, TexturesArray : [Изображение7, Изображение1, Изображение17], Активно: true } ] }   -  person Samra Khan    schedule 19.11.2019
comment
gameData = JsonUtility.FromJson‹GameData›(json); это не работает, gameData.Items.Count содержит 0 :(   -  person Samra Khan    schedule 19.11.2019


Ответы (1)


Чтобы быть (де)сериализованным, Item должен быть [Serializable]

using System;

...

[Serializable]
public class Item
{
    ...
}

Затем вы можете просто использовать встроенный в Unity JsonUtility.FromJson:

public GameData gameData;
private void LoadGameData()
{
    string path = "ItemsData";
    TextAsset targetFile = Resources.Load<TextAsset>(path);
    string json = targetFile.text;
    gameData = JsonUtility.FromJson<GameData>(json);
    print(gameData.Items.Count);
}

Для загрузки чего-либо, например. persistentDataPath Я всегда использую что-то вроде

var path = Path.Combine(Application.persistentDataPath, "FileName.txt")
using (var fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read))
{
    using (var sr = new StreamReader(fs))
    {
        var json = sr.ReadToEnd();

        ...
    }
}

Для разработки я помещаю свой файл в StreamingAssets (streamingAssetsPath) при запуске кода в редакторе Unity.

Затем во время выполнения я читаю из persistentFilePath. Если файла нет, я сначала скопирую его из streamingassetsPath в первый раз.

Здесь я писал больше об этом подходе

person derHugo    schedule 19.11.2019