2016-11-29 7 views
0

Я хотел бы иметь объектов сериализованный/десериализованный от JSON in Flutter. Я знаю, что могу использовать JsonDecoder от json.dart, который дает мне привязку на основе строки LinkedHashMap, но меня больше интересует ObjectMapper подход, так что я могу получить набранный ответ от десериализации.JSON ObjectMapper in Flutter

Я попытался Редстоун картографа (link) и экспортоспособную библиотека (link) с флаттера - оба из которых я не могу скомпилировать должным образом. Я считаю, что проблема связана с библиотекой отражений от Дарта.

Как я могу создать рабочий объект-Json Mapper с помощью Flutter?

Пример кода:

class A { 

    @Field() 
    String b; 
} 

import 'package:redstone_mapper/mapper.dart'; 
import 'package:redstone_mapper/mapper_factory.dart'; 

bootstrapMapper(); 
var desObj = decodeJson(jsonString, A); 

Ошибка:

Starting device daemon... 
Running lib/main.dart on Nexus 5X... 
Dart snapshot generator failed with exit code 254 
Errors encountered while loading: 'dart:mirrors': error: line 1 pos 1: unexpected token 'Unhandled' 

или это один:

Error detected in application source code: 
error: Failed to load main script: 
'package:redstone_mapper/mapper_factory.dart': error: line 4 pos 1: import of dart:mirrors with --enable-mirrors=false 
import 'dart:mirrors'; 

ответ

5

Проблема с библиотеками вы пробовали, что они используют dart:mirrors, который не является поддерживается на Flutter.

Вы должны попробовать библиотеку, которая использует Codegen вместо этого, например built_value: https://github.com/google/built_value.dart

+0

Использование этой библиотеки более чем добавление простого ' 'import'' заявление. Посмотрите мой ответ [здесь] (http://stackoverflow.com/a/41251216/706387) –

0

Как @HarryTerkelsen предложил там built_value библиотека от Google.

Пример сериализации можно найти here. Недостатком является то, что built_value использует генерируемые * .g.dart классы для создания сериализаторов, поэтому эта библиотека не является простым «import & run».

Существует пример проекта, который демонстрирует сериализацию коллекции. Collection и generated serializer.

Короче говоря - вам нужно запустить this, чтобы сгенерировать сериализаторы.

EDIT:

В конце концов, я в конечном итоге написание простой сериализации с нуля:

import 'dart:convert'; 

class ItemDescription { 
    String tag; 

    String name; 

    static ItemDescription deserialize(String str) { 
    JsonDecoder decoder = new JsonDecoder(); 
    var deserializedMap = decoder.convert(str); 
    return deserialize(deserializedMap); 
    } 

    static ItemDescription deserializeMap(Map map) { 
     ItemDescription description = new ItemDescription(); 
     description.name = map["name"]; 
     description.tag = map["symbol"]; 
     return description; 
    } 
} 
+0

Должна ли последняя строка метода «десериализации» вызывать «deserializeMap», а не сама? – breadbin

+0

Не могли бы вы добавить пример того, как это будет использоваться. заранее спасибо – RexFuzzle

 Смежные вопросы

  • Нет связанных вопросов^_^