object_serializer 0.1.4
object_serializer: ^0.1.4 copied to clipboard
A serializer (with caching support) of any static (generic) complex data that can be represented as simpler data.
example/example.dart
// GENERATED BY TOOL
// https://pub.dev/packages/object_serializer
// SimpleJsonSerializerGenerator
// This code is an example, it was generated by another example code
import 'dart:convert';
import 'package:object_serializer/json_serializer.dart';
void main(List<String> args) {
final price = BigInt.from(29.99);
final order = Order(
amount: price,
company: _company,
customer: _customer,
date: DateTime.now(),
lines: [
OrderLine(
product: _product,
price: price,
quantity: 25,
total: price * BigInt.from(25))
],
);
final orders = [order, order];
final jsonObject = serializeList(orders, _collection);
final jsonString = jsonEncode(jsonObject);
final jsonObject2 = jsonDecode(jsonString);
final orders2 = deserializeList<Order>(jsonObject2, _collection);
final jsonObject3 = serializeList(orders2, _collection);
final jsonString2 = jsonEncode(jsonObject3);
final result = jsonString == jsonString2;
print(jsonString2);
print('Test passed: $result');
}
final _collection = JsonSerializerCollection()
..addSerializer(BigIntSerializer())
..addSerializer(CompanySerializer())
..addSerializer(CustomerLevelSerializer())
..addSerializer(CustomerSerializer())
..addSerializer(DateTimeSerializer())
..addSerializer(DurationSerializer())
..addSerializer(OrderLineSerializer())
..addSerializer(OrderSerializer())
..addSerializer(ProductSerializer())
..addSerializer(UriSerializer());
final _company = Company(
name: 'ACME Inc.',
website: Uri.parse('https://acme.com'),
);
final _customer = Customer(
age: null,
birthday: null,
frequency: Duration(days: 10),
level: CustomerLevel.wholesale,
name: 'Peter Pan',
);
final _product = Product(
name: 'The Little White Bird',
price: BigInt.from(49.99),
priceRange: {
'3': 49.99,
'10': 39.99,
'25': 29.99,
},
);
class Company {
Company({required this.name, required this.website});
final String name;
final Uri website;
}
class Customer {
Customer(
{required this.age,
required this.birthday,
required this.frequency,
required this.level,
required this.name});
final int? age;
final DateTime? birthday;
final Duration frequency;
final CustomerLevel level;
final String name;
}
class Order {
Order(
{required this.amount,
required this.company,
required this.customer,
required this.date,
required this.lines});
final BigInt amount;
final Company company;
final Customer customer;
final DateTime date;
final List<OrderLine> lines;
}
class OrderLine {
OrderLine(
{required this.product,
required this.price,
required this.quantity,
required this.total});
final Product product;
final BigInt price;
final int quantity;
final BigInt total;
}
class Product {
Product({required this.name, required this.price, required this.priceRange});
final String name;
final BigInt price;
final Map<String, double> priceRange;
}
enum CustomerLevel { retail, wholesale }
class CompanySerializer extends JsonSerializer<Company> {
@override
Company deserialize(Deserializer deserializer, Object? value) {
final json = cast<Map>(value);
return Company(
name: deserializer.deserialize(json['name']),
website: deserializer.deserialize(json['website']),
);
}
@override
Map<String, dynamic> serialize(Serializer serializer, Company value) {
return {
'name': serializer.serialize(value.name),
'website': serializer.serialize(value.website),
};
}
}
class CustomerSerializer extends JsonSerializer<Customer> {
@override
Customer deserialize(Deserializer deserializer, Object? value) {
final json = cast<Map>(value);
return Customer(
age: deserializer.deserialize(json['age']),
birthday: deserializer.deserialize(json['birthday']),
frequency: deserializer.deserialize(json['frequency']),
level: deserializer.deserialize(json['level']),
name: deserializer.deserialize(json['name']),
);
}
@override
Map<String, dynamic> serialize(Serializer serializer, Customer value) {
return {
'age': serializer.serialize(value.age),
'birthday': serializer.serialize(value.birthday),
'frequency': serializer.serialize(value.frequency),
'level': serializer.serialize(value.level),
'name': serializer.serialize(value.name),
};
}
}
class OrderSerializer extends JsonSerializer<Order> {
@override
Order deserialize(Deserializer deserializer, Object? value) {
final json = cast<Map>(value);
return Order(
amount: deserializer.deserialize(json['amount']),
company: deserializer.deserialize(json['company']),
customer: deserializer.deserialize(json['customer']),
date: deserializer.deserialize(json['date']),
lines: deserializer.deserializeList(json['lines']),
);
}
@override
Map<String, dynamic> serialize(Serializer serializer, Order value) {
return {
'amount': serializer.serialize(value.amount),
'company': serializer.serialize(value.company),
'customer': serializer.serialize(value.customer),
'date': serializer.serialize(value.date),
'lines': serializer.serializeList(value.lines),
};
}
}
class OrderLineSerializer extends JsonSerializer<OrderLine> {
@override
OrderLine deserialize(Deserializer deserializer, Object? value) {
final json = cast<Map>(value);
return OrderLine(
product: deserializer.deserialize(json['product']),
price: deserializer.deserialize(json['price']),
quantity: deserializer.deserialize(json['quantity']),
total: deserializer.deserialize(json['total']),
);
}
@override
Map<String, dynamic> serialize(Serializer serializer, OrderLine value) {
return {
'product': serializer.serialize(value.product),
'price': serializer.serialize(value.price),
'quantity': serializer.serialize(value.quantity),
'total': serializer.serialize(value.total),
};
}
}
class ProductSerializer extends JsonSerializer<Product> {
@override
Product deserialize(Deserializer deserializer, Object? value) {
final json = cast<Map>(value);
return Product(
name: deserializer.deserialize(json['name']),
price: deserializer.deserialize(json['price']),
priceRange: deserializer.deserializeMap(json['priceRange']),
);
}
@override
Map<String, dynamic> serialize(Serializer serializer, Product value) {
return {
'name': serializer.serialize(value.name),
'price': serializer.serialize(value.price),
'priceRange': serializer.serializeMap(value.priceRange),
};
}
}
class CustomerLevelSerializer extends JsonSerializer<CustomerLevel> {
@override
CustomerLevel deserialize(Deserializer deserializer, Object? value) {
final json = cast<int>(value);
return CustomerLevel.values[json];
}
@override
int serialize(Serializer serializer, CustomerLevel value) {
return value.index;
}
}
class BigIntSerializer extends JsonSerializer<BigInt> {
@override
BigInt deserialize(Deserializer deserializer, Object? value) {
final json = cast<String>(value);
return BigInt.parse(json);
}
@override
String serialize(Serializer serializer, BigInt value) {
return value.toString();
}
}
class DateTimeSerializer extends JsonSerializer<DateTime> {
@override
DateTime deserialize(Deserializer deserializer, Object? value) {
final json = cast<String>(value);
return DateTime.fromMicrosecondsSinceEpoch(int.parse(json));
}
@override
String serialize(Serializer serializer, DateTime value) {
return value.microsecondsSinceEpoch.toString();
}
}
class DurationSerializer extends JsonSerializer<Duration> {
@override
Duration deserialize(Deserializer deserializer, Object? value) {
final json = cast<String>(value);
return Duration(microseconds: int.parse(json));
}
@override
String serialize(Serializer serializer, Duration value) {
return value.inMicroseconds.toString();
}
}
class UriSerializer extends JsonSerializer<Uri> {
@override
Uri deserialize(Deserializer deserializer, Object? value) {
final json = cast<String>(value);
return Uri.parse(json);
}
@override
String serialize(Serializer serializer, Uri value) {
return value.toString();
}
}