Nano Hash - криптовалюты, майнинг, программирование

gson fromjson выдает ошибку NoClassDefFound при десериализации пользовательского объекта

Я пытаюсь сделать что-то очень простое, и это должно сработать:

Может ли кто-нибудь прокомментировать, почему я могу сериализовать json, но не могу десериализовать его обратно и вернуть свой объект.

Классы

public class ConfigJsonObj {
public List<ConfigJson_InvitesPending> invites_pending;

public ConfigJsonObj() {
    invites_pending = new ArrayList<ConfigJson_InvitesPending>();
}

public ConfigJsonObj(List<ConfigJson_InvitesPending> invitesPendings) {
    invites_pending = new ArrayList<ConfigJson_InvitesPending>();
    if (invitesPendings!=null) {
        invites_pending.addAll( invitesPendings);
    }
} 
}

public class ConfigJson_InvitesPending {
public String toDisplayName;

public ConfigJson_InvitesPending() {}

public ConfigJson_InvitesPending(String toName) {
    toDisplayName = toName;
}
}

Код для сериализации

String json = gson.toJson(configJsonObjObject);

Сгенерированный JSON

{
 "invites_pending": [
 {
   "toDisplayName": "London"
 }
 ]
}

Код для десериализации

ConfigJsonObj obj = gson.fromJson(json, ConfigJsonObj.class);
    return obj;

Исключение, когда я вызываю gson.fromJson(...) выше:

 java.lang.NoClassDefFoundError
 more.nmspace.dto.ConfigJsonObj

Я понятия не имею, почему я получаю ошибку определения класса!

28.08.2015

  • Пересоберите свой проект, убедитесь, что все зависимости присутствуют. Я не думаю, что это проблема Gson. 28.08.2015
  • сделал это, тот же результат. Все эти классы присутствуют в одном пакете. Оба вышеуказанных класса ConfigJson* ранее были внутренними классами, теперь я переместил их в отдельные файлы. 28.08.2015
  • Я действительно, действительно не думаю, что это проблема Gson. Это что-то связано с вашей сборкой или настройкой проекта, вот что вызывает NoClassDefFoundError. Однако в этом вопросе недостаточно информации, чтобы помочь вам разобраться. 28.08.2015

Ответы:


1

Хорошо, теперь все заработало, после 2 вечеров, проведенных с этой ошибкой!

Я использовал код сериализации/десериализации Gson внутри другого класса, который был ParseObject, и это дало мне ошибки.

Eg.

@ParseClassName("MyParseObject")
public class MyParseObject extends ParseObject {

public void setConfigJsonObj(ConfigJsonObject configJsonObj) {
   String json = (new Gson).toJson(configJsonObj);
   put("config_json",json);
}
public ConfigJsonObject getConfigJsonObject() {
   String config_json = getString("config_json");
   ConfigJsonObject obj = (new Gson).fromJson(config_json,ConfigJsonObject.class);
   return obj;

 }

}

Я хотел инкапсулировать преобразование объекта ‹-> json в класс dto, но в данном случае это невозможно.

Итак, теперь я заменил приведенный выше код и сделал сериализацию/десериализацию внешней по отношению к классу MyParseObject, и я передаю json непосредственно ему, а не пользовательскому объекту.

Надеюсь, что это также поможет кому-то еще. Ваше здоровье

28.08.2015
Новые материалы

Кластеризация: более глубокий взгляд
Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

Как написать эффективное резюме
Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

Частный метод Python: улучшение инкапсуляции и безопасности
Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

Как я автоматизирую тестирование с помощью Jest
Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..