InvalidcastException: указанный актерский состав не является действительным || Единство || Custom JSON Converter [закрытC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 InvalidcastException: указанный актерский состав не является действительным || Единство || Custom JSON Converter [закрыт

Сообщение Anonymous »

Я делаю карточную игру и пытаюсь использовать 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.

Подробнее здесь: https://stackoverflow.com/questions/795 ... son-conver
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»