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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Программирование Android Отбросить дробную часть числа http://www.cyberforum.ru/android-dev/thread437725.html
Написал программу по подсчету калорий. Программа отлично работает есть только одно но, выдает результат 3232,036. Как можно отбросить дробную часть полностью, пишу на eclipce. float...
Программирование Android Есть ли разница? Собственно возник такой вопрос:есть ли разница между программированием для телефонов и для планшетов на базе android? Ну например somefunction() реализована для планшета а на телефоне не работает.Или... http://www.cyberforum.ru/android-dev/thread437610.html
Программирование Android Собираем команду программистов под Андроид
В интересный проект, ищем программистов под Андроид. Ссылки на примеры работ(обязательны), контакты и опыт работы отсылать на 81n90@mail.ru с пометкой в теме - AndroidDev
Программирование Android Клиент для игры
Знающие как сделать клиент для браузерной игры (который будет сам заходить в игру и бить соперника) ПРосто писать в ЛС, возможно и платная помощь
Программирование Android Вывести значение в TextView http://www.cyberforum.ru/android-dev/thread435252.html
Приветствую. Решил побаловаться с Android, - написать строковый калькулятор. Написал на xml форму: <?xml version="1.0" encoding="utf-8"?> <LinearLayout...
Программирование Android режем png как можно обрезать png картинку? например вырезать сектор картинки? подробнее

Показать сообщение отдельно
zesen
122 / 85 / 1
Регистрация: 17.10.2010
Сообщений: 436

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

30.01.2012, 15:04. Просмотров 902. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru