Giter Club home page Giter Club logo

Comments (19)

grennis avatar grennis commented on August 23, 2024 20

@chimbori I agree. Transient has too many meanings in other contexts. Moshi should have its own dedicated annotation for excluding properties.

from moshi.

ifarhanpatel avatar ifarhanpatel commented on August 23, 2024 16

anyone looking for kotlin alternative,it would be @ Transient

from moshi.

chimbori avatar chimbori commented on August 23, 2024 12

transient is also used by other libraries, such as Cupboard for the same purpose. With two separate annotations (one for Moshi, one for Cupboard), one could mark a field for inclusion/exclusion in JSON as well as (separately) in a database table.

But with the current approach of only supporting this via transient, Moshi makes it hard to play well with other libraries. Ideally, each library’s builder should provide a way to opt out of special treatment for transient and opt into annotation-based exclusion strategies.

from moshi.

grennis avatar grennis commented on August 23, 2024 10

@i-farhanp Unfortunately @ Transient requires a backing field, so you can't do:
@ Transient val something: String by lazy { ... }

What is the proper solution to ignore a field for Kotlin? Moshi throws an exception on a lazy property. So right now I simply can't use lazy properties on classes serialized by Moshi.

from moshi.

aballano avatar aballano commented on August 23, 2024 6

Please take into account that making a field transient will turn into that field not being serialized; ex: Bundle.putSerializable(...) won't work on that specific field.

from moshi.

dimsuz avatar dimsuz commented on August 23, 2024 5

Is there a way to make this exclusion happen at the runtime? E.g. something like Gson's ExclusionStrategy? The reason I'm asking is because I'd like to try using Moshi with Realm database. See Realm's instructions for Gson for example (they require using ExclusionStrategy to exclude some internal fields):

https://realm.io/docs/java/0.77.0/#other-libraries

from moshi.

swankjesse avatar swankjesse commented on August 23, 2024 3

Good idea @vanniktech. Done!

from moshi.

grennis avatar grennis commented on August 23, 2024 3

@hzsweers and others, I found that you CAN use lazy properties on Moshi classes with: @delegate:Transient (instead of @Transient...) So, I think it's fine.

from moshi.

swankjesse avatar swankjesse commented on August 23, 2024 1

Use transient on the field declaration.

private String serialized;
private transient String not_serialized;

from moshi.

swankjesse avatar swankjesse commented on August 23, 2024 1

Not at the moment. We could support say, @Json(include=false) or something.

from moshi.

vanniktech avatar vanniktech commented on August 23, 2024 1

Would be nice if this transient feature could be mentioned in the README.

from moshi.

xuxucode avatar xuxucode commented on August 23, 2024

cool, thanks.

from moshi.

dimsuz avatar dimsuz commented on August 23, 2024

Looks like it wouldn't solve it in this case. In the example on the above page User class inherits RealmObject class which would have some field to be excluded and this field is not accessible to library client and RealmObject itself is part of the library too, user has no option of annotating its fields with @Json(include=false)...

from moshi.

swankjesse avatar swankjesse commented on August 23, 2024

I think transient is probably easiest. Let's stick with that.

from moshi.

swankjesse avatar swankjesse commented on August 23, 2024

Your best bet is to write a JSON Adapter that converts a value to something that can be encoded. The wiki has examples.

from moshi.

dimsuz avatar dimsuz commented on August 23, 2024

Yes, transient looks really simple and means exactly same as its documentation says :)
Ok, thanks, will play around.

from moshi.

miPlodder avatar miPlodder commented on August 23, 2024

@swankjesse How to achieve it in Kotlin ?

from moshi.

micHar avatar micHar commented on August 23, 2024

@swankjesse it would be nice if you revisited this issue, because transient is clearly not suitable for all kotlin usages.

from moshi.

ZacSweers avatar ZacSweers commented on August 23, 2024

@grennis could you file a separate issue with a stacktrace or small sample project that reproduces it? Sounds like something we could at least give a better exception for.

from moshi.

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.