Git Product home page Git Product logo

Comments (8)

MrMonotone avatar MrMonotone commented on May 5, 2024 8

For others who are looking for away to do this with Decimal without having to create static methods that you have to reference everywhere. This is the way I did it. It would be helpful for there to be more documentation about how to write converters for types from other packages. I do not know if this is the "right way" but to me the implementation is cleaner.

@JsonSerializable(nullable: false)
@_DecimalStringConverter()
class DecimalClass {
 Decimal myDecimal;
}

class _DecimalStringConverter implements JsonConverter<Decimal, String> {
  const _DecimalStringConverter();

  @override
  Decimal fromJson(String json) => json == null ? null : Decimal.parse(json);

  @override
  String toJson(Decimal object) => object?.toString();
}

from json_serializable.dart.

jakemac53 avatar jakemac53 commented on May 5, 2024 1

Fwiw, instead of trying to use the TypeHelper stuff you can just use the fromJson and toJson optional args on the JsonKey annotation to use a custom function. The main issue with that is you have to do it per field though.

from json_serializable.dart.

elmcrest avatar elmcrest commented on May 5, 2024 1

Hey, sorry to open this again but I struggle with implementing the workaround...

what I try is something like:

  @JsonKey(
    name: "rate",
    fromJson: Decimal.parse(value),
    toJson: value.toString(),
  )
  Decimal rate;

fromJson doesn't work because of Arguments of a constant creation must be constant expressions. and toJson because of The argument type 'String' can't be assigned to the parameter type 'Function'.

I get that toJsoncan't work this way but also no Idea how to get this - and for fromJson I don't really know what the error message means tbh :/

Thx for any hints

Ok, it seems I figured it:

what I did now is:

  @JsonKey(
    name: "rate",
    fromJson: _decimalFromJson,
    toJson: _decimalToJson,
  )
  Decimal rate;
  static Decimal _decimalFromJson(input) => Decimal.parse(input);
  static String _decimalToJson(input) => input.toString();

it seems I did two mistakes, 1. is not using a function (could probably also be an anonymous function?) and 2. the static keyword is needed for some reason.

anyways, it works, great! :)

(not yet 100% tested but I wanted to update this first.)

from json_serializable.dart.

enyo avatar enyo commented on May 5, 2024

Yes... that would be great. I'm a bit stuck here. @kevmoo it would be great if you could maybe add a comment here if you don't have the time to update the docs.

In my specific case, I need to convert Strings "123.45" to Decimal: Decimal.parse(value).

from json_serializable.dart.

kevmoo avatar kevmoo commented on May 5, 2024

@enyo – does the comment from @jakemac53 help?

from json_serializable.dart.

enyo avatar enyo commented on May 5, 2024

@kevmoo yes definitely! That is a completely acceptable workaround for now.

from json_serializable.dart.

kevmoo avatar kevmoo commented on May 5, 2024

Great to hear, @elmcrest

from json_serializable.dart.

kevmoo avatar kevmoo commented on May 5, 2024

Honestly, I want to get away from expose the type helper stuff.

It's a lot of internal plumbing that's just got more complex.

from json_serializable.dart.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.