Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
zesen
122 / 85 / 1
Регистрация: 17.10.2010
Сообщений: 436
#1

Как это перевети на использование библиотеки JACKSON? - Программирование Android

30.01.2012, 15:04. Просмотров 879. Ответов 0
Метки нет (Все метки)

Здравствуйте! Сейчас используется библиотека GSON, хочу перейти на использование JACKSON (хотя бы попробовать, слышал, что работает быстрее). Для работы с датами и ByteArray создана такая обложка:

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
55
56
57
58
59
60
61
62
63
public class MyGsonWrapper
{
public static Gson getMyGson()
{
    GsonBuilder gsonBuilder = new GsonBuilder();
 
    gsonBuilder.registerTypeAdapter(Date.class, new GsonDateSerializer());
    gsonBuilder.registerTypeAdapter(Date.class, new GsonDateDeserializer());
 
    gsonBuilder.registerTypeAdapter(byte[].class, new GsonByteArraySerializer());
 
    return gsonBuilder.create();
}
 
static class GsonDateDeserializer implements JsonDeserializer<Date>
{
    public Date deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context) throws JsonParseException
    {
        String s = json.getAsString().replace("/Date(", "").replace(")/", "");
 
        if (s.equals("")) return null;
 
        boolean isDateBefore1970 = false;
        if (s.length() > 0 && s.indexOf("-") == 0)
        {
            isDateBefore1970 = true;
            s = s.substring(1, s.length());
        }
 
        long offset = 0;
        if (s.length() > 5 && (s.indexOf("-") == s.length()-5 || s.indexOf("+") == s.length()-5))
        {               
            offset = Long.valueOf(s.substring(s.length()-4, s.length()-2))*60 + Long.valueOf(s.substring(s.length()-2, s.length()));
 
            if (s.indexOf("-") == s.length()-5) offset = -offset;
 
            s = s.substring(0, s.length()-5);
        }
 
        if (isDateBefore1970)
            return new Date(-Long.valueOf(s) - offset * 60 * 1000);
        else
            return new Date(Long.valueOf(s) + offset * 60 * 1000);
 
    }
}
 
static class GsonDateSerializer implements JsonSerializer<Date>
{
    public JsonElement serialize(Date date, Type typeOfT, JsonSerializationContext context)
    {
        return new JsonPrimitive("/Date(" + date.getTime() + ")/");
    }
}
 
static class GsonByteArraySerializer implements JsonSerializer<byte[]>
{
    public JsonElement serialize(byte[] data, Type typeOfT, JsonSerializationContext context)
    {
        return new JsonPrimitive(Base64.encodeBytes(data));
    }
}
}
С ByteArray JACKSON работает и сам нормально, следовательно GsonByteArraySerializer не нужен, с датами в миллисекунды тоже там настраивается и он сам работает с ними, как я понимаю. Может я в чем то не прав? Помогите переделать, что бы перейти с GSON на JACKSON библиотеку. Как я понимаю, новая обвертка должна начинаться так:

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
 public class MyJsonWrapper     {
 
public static ObjectMapper getMyJson()
{
    ObjectMapper mapper = new ObjectMapper(new SmileFactory());
 
    SimpleModule module = new SimpleModule("MyModule", new Version(1, 0, 0, null));
 
    module.addSerializer(Date.class, new JsonDateSerializer());
    module.addDeserializer(Date.class, new JsonDateDeserializer());
 
    module.addSerializer(byte[].class, new JsonByteArraySerializer());
 
    mapper.registerModule(module);
 
    return mapper;
}
 
static class JsonDateDeserializer implements JsonDeserializer<Date>
{
 
    public Date deserializeWithType(JsonParser jp, DeserializationContext ctxt, TypeDeserializer typeDeserializer) throws java.io.IOException, JsonProcessingException
    {
 
    }
 
static class JsonDateSerializer implements JsonSerializer<Date>
{
    public JsonParser serialize(Date date, Type typeOfT, Serializers context)
    {
        return new JsonPrimitive("/Date(" + date.getTime() + ")/");
    }
}
 
static class JsonByteArraySerializer implements JsonSerializer<byte[]>
{
    public JsonParser serialize(byte[] data, Type typeOfT, Serializers context)
    {
        return new JsonPrimitive(Base64.encodeBytes(data));
    }
}
Раньше сериализация и десериализация проходили следующим образом:

Java
1
2
MyGsonWrapper.getMyGson().toJson(MyObject) 
MyGsonWrapper.getMyGson().fromJson(response.Body, MyObject[].class);
Может эта обвертка и не нужна совсем, может на прямую обращаться к функциям JACKSON? Если она все таки нужна, подскажите как изменить. Если не нужна, то через какие какие именно функции из библиотеки осуществлять сериализация и десериализация и как к ним обращаться...
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.01.2012, 15:04
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как это перевети на использование библиотеки JACKSON? (Программирование Android):

Использование сторонней библиотеки - Программирование Android
Понадобилось добавить в приложение диалог выбора цвета. Встроенного ColorPicker'a я не нашёл и пошёл гуглить рукописные варианты. Самый...

Использование C# библиотеки в java android - Программирование Android
Всем привет) У меня есть библиотека, написанная на C#(конкретно для работы с XML (использую System.Xml.Linq)), и мне её нужно использовать ...

Использование библиотеки (so) в исходниках на с++ с ndk - Программирование Android
Добрый день. Недавно разбираюсь с NDK. И возник вопрос. У меня есть библиотека (1)(*.so), могу ли я ее подключить к NDK и...

Использование библиотеки 47deg/android-swipelistview - Программирование Android
Добрый день. В своем проекте хочу использовать библиотеку android-swipelistview притягиваю ее с гитхаба а тама все в ерорах... Если кто то...

как перевети с++ на java ? - Java
Собственно сам код. int Count(double r) { int i, j, count = 0; for(i = -r; i &lt;= r; i++) for(j = -r; j &lt;= r; j++) ...

Jackson Parser не работает как надо - Java SE
Всем привет! Кто может сказать - почему Jackson парсер моей реализации собирает null значения из json фалйа? Класс парсера: ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.01.2012, 15:04
Привет! Вот еще темы с ответами:

База данных мини библиотеки как это.... - Delphi БД
Салам алейкум! Знатоки базы данных! У меня просьба ко всем кто может хоть чем помочь. Проблема следующая: Я поступил на работу в пед....

UINT - что это за тип? И как его из библиотеки в C# перевести? - C++
Здравия всем! В общем, есть функция такая: Q1: Что это за UINT такой? Я интернетах пишут, будто это сокращение от Unsigned...

Использование CInt() - это бага или как? - Базы данных
Кто-нибудь пробовал делать так? CInt(16.5) и CInt(17.5) и сравнить результаты действия функции? У меня получается 16 и 18...

Есть база данных библиотеки, сотрудники, задолжники и тд. нужно сделать запросы и отчеты, они простые но как делать с формами это я не знаю - MS Access
Отчеты 1. Книги i-го автора 2. Книги, хранящиеся на i-ом стеллаже 3. Кол-во экземпляров книг i-го автора Запросы ...


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

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

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