I also forget the fact that Groovy records are not always Java records when running on older JDKs... So it needs to make the difference with real and groovy-specific fallthrough records.
On Tue, Sep 5, 2023 at 10:46 AM Guillaume Laforge <glafo...@gmail.com> wrote: > Sure, I just created: > https://issues.apache.org/jira/browse/GROOVY-11167 > > Also, thanks for the workaround. > I ended up just using a POGO instead, but I hadn't thought of implementing > a Map. > > I guess JsonOutput needs to be updated here > <https://github.com/apache/groovy/blob/master/subprojects/groovy-json/src/main/java/groovy/json/DefaultJsonGenerator.java#L174> > . > I suppose we would add a new if case that check if the class of the object > is a record, and the retrieve the components with > clazz.getRecordComponents()? > > Guillaume > > On Tue, Sep 5, 2023 at 7:44 AM Paul King <pa...@asert.com.au> wrote: > >> We aren't picking up the metabean properties for the record correctly. >> Would you like to file a bug report? >> >> Workarounds are to call "toMap()" (or *.toMap() on the list), or do >> something like: >> ``` >> @AutoImplement >> record Person(String name) implements Map { >> Set entrySet() { toMap().entrySet() } >> } >> ``` >> >> >> < >> https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail >> > >> Virus-free.www.avast.com >> < >> https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=webmail >> > >> <#DAB4FAD8-2DD7-40BB-A1B8-4E2AA1F9FDF2> >> >> On Tue, Sep 5, 2023 at 2:13 AM Guillaume Laforge <glafo...@gmail.com> >> wrote: >> > >> > Hi, >> > >> > I was a bit surprised by this behavior with serializing records in JSON. >> > >> > I was expecting this assertion to pass: >> > >> > import groovy.json.JsonOutput >> > record Person(String name) {} >> > assert JsonOutput.toJson([new Person('Guillaume')]) == >> '[{"name":"Guillaume"}]' >> > >> > Instead, I got [{}] >> > >> > Shouldn't records be treated like POGOs and thus serialize the same way >> like in my example above? Or is there a good reason why this is not the >> case? >> > >> > Guillaume >> > >> > -- >> > Guillaume Laforge >> > Apache Groovy committer >> > Developer Advocate @ Google Cloud >> > >> > Blog: glaforge.dev >> > Twitter: @glaforge >> > Mastodon: @glafo...@uwyn.net >> > > > -- > *Guillaume Laforge* > Apache Groovy committer > Developer Advocate @ Google Cloud <https://cloud.google.com/> > > - Blog: glaforge.dev > - Twitter: @glaforge <http://twitter.com/glaforge> > - Mastodon: @glafo...@uwyn.net <http://%40glafo...@uwyn.net/> > > -- *Guillaume Laforge* Apache Groovy committer Developer Advocate @ Google Cloud <https://cloud.google.com/> - Blog: glaforge.dev - Twitter: @glaforge <http://twitter.com/glaforge> - Mastodon: @glafo...@uwyn.net <http://%40glafo...@uwyn.net/>