←back to thread

.NET 10

(devblogs.microsoft.com)
484 points runesoerensen | 3 comments | | HN request time: 0.001s | source
Show context
kurokawad ◴[] No.45898241[source]
To me, it's pretty much unbelievable that Microsoft introduces an agent framework while for JSON serializing third-party Newtonsoft is still the go-to.

Edit. I was not aware that the gap between System.Text.Json and Newtonsoft narrowed, take my comment with a grain of salt, please!

replies(5): >>45898252 #>>45898257 #>>45898281 #>>45899376 #>>45904557 #
vintermann ◴[] No.45898252[source]
What's wrong with System.Text.Json?
replies(1): >>45901281 #
1. anonymars ◴[] No.45901281[source]
Last I checked they stubbornly insisted on reinventing the wheel and ignoring everything in System.Runtime.Serialization so you had to redecorate everything with their new attributes. For example https://github.com/dotnet/runtime/issues/29975. So we stuck with Newtonsoft for the time being.
replies(1): >>45905931 #
2. WorldMaker ◴[] No.45905931[source]
There is a 3rd Party library for that now: https://github.com/zcsizmadia/ZCS.DataContractResolver

I haven't tried it because it has generally seemed easiest to use the new attributes. Though a large part of that is the shift from the WCF-era "opt-in" approach of DataContract/DataMember [0] versus the "opt-out" JsonIgnore approach where most of the transition is deleting lines because JsonIgnore is the exception rather than the rule. You could even keep DataContract/DataMember during the transition and just take an additive approach for JsonIgnore.

[0]: It was a good idea, in theory, but so annoying in practice.

replies(1): >>45908221 #
3. anonymars ◴[] No.45908221[source]
For me it was less not really about the opt-in part (after all, Newtonsoft works the same way) and more about stupid things like setting a name (DataMember), Enums, and in fact opting out (IgnoreDataMember)

It's especially annoying in libraries because the consumer might not even be using System.Text.Json, but you have to pull in the library anyway to apply its own attributes if you want it to work right. Just an overall awful smell given the existence of first-class framework attributes to do the same thing to avoid just that problem

Case in point: https://github.com/dotnet/efcore/pull/28084/files