Форум программистов, компьютерный форум, киберфорум
Java
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.63/8: Рейтинг темы: голосов - 8, средняя оценка - 4.63
0 / 0 / 0
Регистрация: 04.01.2014
Сообщений: 55
1

Gson. Сериализация/десериализация с сохранением типов данных

04.12.2015, 20:50. Просмотров 1579. Ответов 8


Добрый вечер

Использую GSon.

При десеариализации данных из JSON структура класса к которому приводить данные заранее неизвестна.

Может как-то можно передавать описание класса вмесе с сериализованными данными чтобы с пом рефлексии создать класс, а потом создать объект инициализировав его данными полученными при десериализации?

Спасибо

Добавлено через 38 минут
Другими словами:
Как сериализовать в JSON структуру произвольного класса?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.12.2015, 20:50
Ответы с готовыми решениями:

Gson десериализация объекта в объекте
Всем привет, не могу сообразить как сделать... есть класс: public class Message { private...

Сериализация и десериализация объекта в байты и текст
Мира вам. Перейду сразу к сути задания, цитата из методички: Space, Floor и Building - это...

GSON при получении данных с пробелом выкидывает в ошибку
Создаю Json обьект к примеру такой String F = "{status=0, info={text=FDG FDG HDF}}";. И пытаюсь...

Сериализация/десериализация. Null вместо полей
Добрый вечер. Есть следующие классы: Connector - для записи/считывания из файла, Human - родитель...

8
62 / 44 / 14
Регистрация: 01.07.2009
Сообщений: 145
04.12.2015, 22:01 2
Известны ли возможные варианты классов, которые могут быть в JSON?
1
Эксперт Java
2361 / 2191 / 558
Регистрация: 28.12.2010
Сообщений: 8,577
04.12.2015, 22:18 3
hknower, в таком преобразовании нет смысла. Если вы не знаете структуру класса, вы не сможете с ним работать. При таком раскладе представляйте ваш джсон как класс String и нет проблем.

Скорее всего вы что то делаете не так. Напишите какое задание вы пытаетесь сделать
0
0 / 0 / 0
Регистрация: 04.01.2014
Сообщений: 55
05.12.2015, 13:08  [ТС] 4
В вопросе я упомянул "произвольный класс" который нужно проинициализировать данными, но на самом деле классов всего порядка 150 штук.
Посмотрев на колво классов, я решил что я что-то делаю не так и следует сначала поискать какое-то общее решение, а уже в крайнем случае описывать все 150 классов и передавать метку о классе данных вместе с JSON
0
Эксперт Java
2361 / 2191 / 558
Регистрация: 28.12.2010
Сообщений: 8,577
05.12.2015, 13:18 5
hknower, все 150 отличаются и имеют разный функционал? Что-то вы точно делаете не так
0
0 / 0 / 0
Регистрация: 04.01.2014
Сообщений: 55
05.12.2015, 14:21  [ТС] 6
эти классы нужны только для того чтобы было можно приводить данные полученные из JSON к оригинальным типам. методы этих 150 классов наследуются
0
Эксперт Java
2361 / 2191 / 558
Регистрация: 28.12.2010
Сообщений: 8,577
05.12.2015, 14:49 7
hknower, опишите задание более подробно с контекстом. Возможно есть более правильное решение чем написание 150 классов.
0
0 / 0 / 0
Регистрация: 04.01.2014
Сообщений: 55
05.12.2015, 16:14  [ТС] 8
Если я путаюсь в терминологии, поправьте пожалуйста, неделю занимаюсь изучением Java и пока "плаваю" в элементарных вопросах.

Есть полторы сотни наперед заданных наборов данных. Например,
{Long ,Long, Integer, [String, Long]},
{Long ,Long, Integer, [Integer, Long], Integer}
....

Все наборы начинаются с двух Long'ов, В Java-метод в виде JSON передается набор данных и метка с идентификатором набора, метод должен десериализовать JSON и вернуть Object[]
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
class ClassContainer{
 
//Наборы начинаются с 2-х лонгов
Long cmd_id;
Long cmd_counter;
 
public Object[] Deserialize(String JsonString , int DataSetId){
 
GsonBuilder builder = new GsonBuilder();
Gson gson = builder.create();
 
Object obj = new Object;
 
//Инициализируем класс данными
switch(DataSetId)
{
case 1:{obj = gson.fromJson(JsonString , CDataSet1)};break;
case 2:{obj = gson.fromJson(JsonString , CDataSet2)};break;
....
default: break;
}
 
return obj->GetFileldValuesArray();
};
 
//Получаем массив объектов состоящих из значений полей
public Object[] GetFileldValuesArray()
{
 
                //Что указать вмето AnyClass чтобы при наследовании
                //в локальном классе (например, CDataSet1) были получены поля???
                Field[] fields = AnyClass.class.getFields();
 
            for(int i=0 ; i<fields.length ; i++)
                {
                   ......
                }
        return
}
 
//Первый набор данных
public class CDataSet1 extends ClassContainer{
public String s1;
public String s2;
public Long l1;
}
 
//Второй набор данных
public class CDataSet2 extends ClassContainer{
public String s1;
public Long l1;
}
 
}
Я решил что для каждого набора можно написать класс в котором данным из JSON будут соответствовать поля.
При десереализации будет инициализирован класс соответствующий типу данных.
Для получения Object[] можно используя рефлексию можно пройтись по полям класса и запихнуть их в массив

Это все просто схематически
0
Эксперт Java
2361 / 2191 / 558
Регистрация: 28.12.2010
Сообщений: 8,577
05.12.2015, 17:49 9
hknower, я имел ввиду не вашу интерпретацию задания а само задание с точки зрения бизнеса.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.12.2015, 17:49

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.

Сериализация работает(вроде), а десериализация - нет
Всем привет. Я написал некую программу на Java, при первом запуске которой с консоли вводятся...

Пользовательская сериализация/десериализация большого объема данных
Добрейшего времени суток, коллеги! Разрабатываю узко-специализированное ПО. Для сохранения файла...

Gson. Десериализация неизвестного json
Помогите разобраться как мне выцедить из json-строки нужные мне классы: { data: { 1: { ...

Импорт данных в таблицу БД из Excel с сохранением всех типов данных в таблице БД
Добрый день! Произвожу импорт данных в таблицу БД ms access из таблицы excel. Необходимо при...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.