Я делаю карточную игру и пытаюсь использовать JSON для сохранения данных карт. Тем не менее, я продолжаю получать ту же самую и ту же «указанный актерский состав по какой -то причине не действительна». Мой класс карт выглядит следующим образом: < /p>
public class Card
{
public string cardName = "Card";
public string description = "Description";
public int uses = 1;
public bool isStackable = false;
public int count = 1;
public int rarity = 0; // 0 = common, 1 = uncommon, 2 = rare, 3 = legendary
[JsonIgnore]
public ItemType itemType = ItemType.Item; // Default to Item type
}
< /code>
В классе есть дополнительные функции, но ни один, который должен мешать сериализации. Мой класс конвертера выглядит: < /p>
public class CardConverter : JsonConverter
{
private static readonly Dictionary cardFactory = new Dictionary
{
{ "Health Potion", () => new HealthPotion() },
{ "Stone", () => new Stone() },
{ "Iron Helmet", () => new IronHelmet() },
{ "Iron Chestpiece", () => new IronChestpiece() },
{ "Iron Boots", () => new IronBoots() },
{ "Iron Shield", () => new IronShield() },
{ "Iron Sword", () => new IronSword() },
{ "Shield", () => new Shield() },
{ "Reinforced Shield", () => new IronShield() },
{ "Bow", () => new Bow() },
{ "Arrow", () => new Arrow() },
// Add other cards here...
};
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
{
Card card = (Card)value;
JObject obj = new JObject
{
{ "cardName", card.cardName },
{ "description", card.description },
{ "uses", card.uses },
{ "rarity", card.rarity },
{ "isStackable", card.isStackable },
{ "count", card.count }
};
Debug.Log($"Serializing card: {card.cardName}");
obj.WriteTo(writer);
}
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
JObject obj = JObject.Load(reader);
string cardName = obj["cardName"]?.ToString();
if (string.IsNullOrEmpty(cardName))
{
Debug.LogError("Missing or invalid cardName in JSON.");
return null;
}
Debug.Log($"Deserializing card: {cardName}");
Card card = CreateCardFromCardName(cardName);
if (card == null)
{
Debug.LogError($"Failed to create card for cardName: {cardName}");
return null;
}
// Populate common properties
card.cardName = cardName;
card.description = obj["description"]?.ToString();
card.uses = obj["uses"]?.ToObject() ?? 0;
card.rarity = obj["rarity"]?.ToObject() ?? 0;
card.isStackable = obj["isStackable"]?.ToObject() ?? false;
card.count = obj["count"]?.ToObject() ?? 1;
return card;
}
public override bool CanConvert(Type objectType)
{
return typeof(Card).IsAssignableFrom(objectType);
}
private Card CreateCardFromCardName(string cardName)
{
if (cardFactory.TryGetValue(cardName, out var createCard))
{
return createCard();
}
Debug.LogWarning($"Unknown cardName: {cardName}");
return null;
}
}
< /code>
и мой код тестирования выглядит так: < /p>
// Test serialization
Card testCard = new Card();
string json = JsonConvert.SerializeObject(testCard, Formatting.Indented, new JsonSerializerSettings
{
Converters = new List { new CardConverter() }
});
Debug.Log($"Serialized JSON: {json}");
Я могу опубликовать стек, если это поможет, но кажется, что у него возникает проблема с преобразованием enum, чего не должно происходить, поскольку enum itemtype помечен Jsonignore.
Я делаю карточную игру и пытаюсь использовать JSON для сохранения данных карт. Тем не менее, я продолжаю получать ту же самую и ту же «указанный актерский состав по какой -то причине не действительна». Мой класс карт выглядит следующим образом: < /p> [code] public class Card { public string cardName = "Card"; public string description = "Description"; public int uses = 1; public bool isStackable = false; public int count = 1; public int rarity = 0; // 0 = common, 1 = uncommon, 2 = rare, 3 = legendary [JsonIgnore] public ItemType itemType = ItemType.Item; // Default to Item type } < /code> В классе есть дополнительные функции, но ни один, который должен мешать сериализации. Мой класс конвертера выглядит: < /p> public class CardConverter : JsonConverter { private static readonly Dictionary cardFactory = new Dictionary { { "Health Potion", () => new HealthPotion() }, { "Stone", () => new Stone() }, { "Iron Helmet", () => new IronHelmet() }, { "Iron Chestpiece", () => new IronChestpiece() }, { "Iron Boots", () => new IronBoots() }, { "Iron Shield", () => new IronShield() }, { "Iron Sword", () => new IronSword() }, { "Shield", () => new Shield() }, { "Reinforced Shield", () => new IronShield() }, { "Bow", () => new Bow() }, { "Arrow", () => new Arrow() }, // Add other cards here... };
public override bool CanConvert(Type objectType) { return typeof(Card).IsAssignableFrom(objectType); }
private Card CreateCardFromCardName(string cardName) { if (cardFactory.TryGetValue(cardName, out var createCard)) { return createCard(); }
Debug.LogWarning($"Unknown cardName: {cardName}"); return null; } } < /code> и мой код тестирования выглядит так: < /p> // Test serialization Card testCard = new Card(); string json = JsonConvert.SerializeObject(testCard, Formatting.Indented, new JsonSerializerSettings { Converters = new List { new CardConverter() } }); Debug.Log($"Serialized JSON: {json}"); [/code] Я могу опубликовать стек, если это поможет, но кажется, что у него возникает проблема с преобразованием enum, чего не должно происходить, поскольку enum itemtype помечен Jsonignore.
Я делаю карточную игру и пытаюсь использовать JSON для сохранения данных карт. Тем не менее, я продолжаю получать ту же самую и ту же «указанный актерский состав по какой -то причине не действительна». Мой класс карт выглядит следующим образом:...