Десериализация массива JSON с Unity JsonUtility не может получить сериализованные значения - PullRequest
3 голосов
/ 26 мая 2019

Я пытаюсь десериализовать информацию о карте из JSON для использования в игре Unity, но она работает не совсем правильно. Я протестировал классы, к которым пытаюсь десериализоваться, и могу вручную создавать объекты для них, но десериализатор не создает их правильно.

Когда я запускаю логику десериализации, результирующий массив имеет правильный размер, но ни одно из полей Cost или Name карточек не заполняется, и у меня остается массив неинициализированных Card объектов.

Соответствующий код у меня следующий:

Файл, в котором мы десериализованы, Game.cs:

using System.IO;
using UnityEngine;
public class Game {

    private CardsCollection allCards;    

    private void LoadJson()
    {
        ...
        // Find the path to our JSON file
        // Save the path as "path"

        // I have verified this line gets the correct json data as a string
        string json = File.ReadAllText(path); 

        // Convert the json string into a deserialized array of objects
        // using the CardsCollection wrapper
        allCards = JsonUtility.FromJson<CardsCollection>(json);
    }

}

Файл объекта Card, Card.cs:

using System;
[Serializable]
public class Card
{
    public string Name { get; set; }
    public int Cost    { get; set; }

    public Card(string Name, int Cost)
    {
        this.Name = Name;
        this.Cost = Cost;
    }
}

[Serializable]
public class CardsCollection
{
    public Card[] cards;
}

И, наконец, сам JSON:

{
    "cards": [
        {
            "Name": "copper",
            "Cost": 0
        },
        {
            "Name": "silver",
            "Cost": 3
        },
        {
            "Name": "gold",
            "Cost": 6
        },
        {
            "Name": "curse",
            "Cost": 0
        },
        {
            "Name": "estate",
            "Cost": 2
        },
        {
            "Name": "duchy",
            "Cost": 5
        },
        {
            "Name": "province",
            "Cost": 8
        }
    ]
}

1 Ответ

1 голос
/ 26 мая 2019

Сериализация Json может обрабатывать только поля (см. Поддерживаемые типы https://docs.unity3d.com/Manual/JSONSerialization.html), но ваши Имя и Стоимость выглядят как свойства В чем разница между полем и свойством?

Так как они помечены как общедоступные и могут быть доступны напрямую, я просто удалил {get; set}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...