Comments (19)
@chimbori I agree. Transient has too many meanings in other contexts. Moshi should have its own dedicated annotation for excluding properties.
from moshi.
anyone looking for kotlin alternative,it would be @ Transient
from moshi.
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.
@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.
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.
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.
Good idea @vanniktech. Done!
from moshi.
@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.
Use transient
on the field declaration.
private String serialized;
private transient String not_serialized;
from moshi.
Not at the moment. We could support say, @Json(include=false)
or something.
from moshi.
Would be nice if this transient
feature could be mentioned in the README.
from moshi.
cool, thanks.
from moshi.
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.
I think transient
is probably easiest. Let's stick with that.
from moshi.
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.
Yes, transient
looks really simple and means exactly same as its documentation says :)
Ok, thanks, will play around.
from moshi.
@swankjesse How to achieve it in Kotlin ?
from moshi.
@swankjesse it would be nice if you revisited this issue, because transient is clearly not suitable for all kotlin usages.
from moshi.
@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)
- warning: Kapt support in Moshi Kotlin Code Gen is deprecated and will be removed in 2.0. HOT 3
- Backend Internal error: Exception during IR lowering HOT 1
- Update Okio to 3.4.0 or higher HOT 4
- Field serialized despite of the Transient annotation
- Kotlin Duration Adapter fails to be generated with codegen
- Undocumented behavior on serialization of non-constructor property with defaults HOT 12
- Better egonomics when replacing nulls with default values HOT 4
- Alternative Enum adapter with default value HOT 8
- Retrofit / enum class / @Json name specified / @FormUrlEncoded API HOT 1
- Bug with ProGuard and R8 HOT 3
- Out of memory error HOT 2
- Support Kotlin Multiplatform HOT 2
- Classes annotated with @JsonClass(generateAdapter = true) are not obfuscated HOT 1
- Moshi Codegen doesn't work with OpenAPI 3.1.0 HOT 7
- `@JsonClass(generateAdapter = true)` fails when class has field with type `Array<Array<T>>` with default
- KSP2 throws `NoSuchElementException` for data classes with `@JsonAdapter(generateAdapter = true)` HOT 1
- Build software better, together
- KSP2 crash when using @JsonQualifier HOT 3
- JDK9 Modules: module reads package com.squareup.moshi from both com.squareup.moshi.adapters and com.squareup.moshi HOT 1
- Moshi Polymorphic adapter fails on Kotlin 2.0 scripts
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
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.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from moshi.