►
From YouTube: .NET Design Review: JSON Serialization
Description
Today, we're continuing our review of JSON serialization.
https://github.com/dotnet/corefx/issues/34372
https://github.com/dotnet/corefx/issues/36351
A
B
B
C
B
B
And
then
the
other
feedback
was
there
was
concern
about
mixing
design,
time
and
runtime
type
behavior
and
I
added
back
in
a
way
this
originally
at
attribute
method,
except
I,
now
list,
in
this
case
one
of
the
attributes.
So
that's
covered
later
in
this
document-
and
this
is
the
main
thing
I
want
to
get
feedback
on
for
this
issue-
is
that?
Are
we
okay
with
doing
this?
B
This
does
not
return
any
kind
of
runtime
information
like
the
old
approach,
where
you
call
get
class
or
get
get
class
back,
get
property
and
then
add
the
attribute
to
the
des
Plantes
for
the
property.
But
this
just
finally
says
here's
a
runtime
attribute
and
we
can
expose
the
runtime
information
at
some
future
point
at
runtime.
Future
information
won't
be
based
on
attributes.
These
doubtful
pools.
D
Json
class
info
that,
under
that
one
is
now
internal
correct,
because,
yes,
people
will
just
use
an
awesome,
I
love
it.
Okay,
I
think
it's
a
no
I
had
a
question
why
there
are
parameters
that
are
optional
for
the
great
attributes
like
what
does
it
mean
to
add
an
attribute
property
attribute
and
not
specify
which
property?
Okay.
B
Today,
the
the
attributes,
if
you
put
design-time
attributes,
can
either
apply
to
a
class
or
a
property
they
apply
to
the
class
and
they
apply
to
all
the
properties,
at
least
for
these
types
of
attributes.
Now,
so,
if
you
don't
specify
property,
it
applies
to
all
of
them.
That's
why
the
property,
as
finds
that
one
property,
and
if
you
don't
specify
anything
which
is
the
first
one,
the
pipe
is
global
to
this
to
their.
D
B
B
To
be
a
bass
classic,
okay,
so
originally
I
had
this
and
it'll
just
look
kind
of
loosely
tighten.
You
could
add
me
any
attribute
this
one
I'm,
assuming
that
I
want
to
create
these
three
overloads
for
every
for
the
10
attributes
we
end
up
having
soon
might
be
30
for
those,
but
why
wouldn't
you
just
innate
a
basic
ad
for
all
J
simulated?
It
should
be
this
weekend,
but
I
there
was.
There
was
originally
some
discussion
what
discoverability,
but
this
could
be
all
collapsed
until
you
had
the
base.
B
D
B
H
B
It
depends
on
the
attribute
it
the
attribute
all
it
gets
for
a
property
like,
for
example,
this
ignore
ones
is
talk
about
joint,
specific
property
yeah.
Then,
when
you
call
the
second
one,
it's
the
default
or
properties,
and
this
is
the
same
at
design-time.
So
if
you
pop
that
attribute
on
it
on
a
class,
a
public
class
by
default,
for
example,
one
of
the
abilities
would
be
you
know,
don't
they
realize
read-only
properties?
A
A
G
B
Originally
had
some
of
these
knobs
on
on
this
in
this
issue
and
currently
checked
in,
but
I
decided
to
cover
this
one
after
Pete
here
and
I
did
add
two
features
here
that
were
discussed.
I'm
not
gonna,
implement
these
right
away
because
we
have
another
time
slot
for
this.
But
this
is
a
PID
proposal
that
the
first
one
ignore
says:
yes,
ignore
everything,
and
if
you
drop
that
on
the
class,
it
wouldn't
be
essentially
turned
into
everything
off
by
default
right
and
then
you
would
have
to
turn
it
on
each
property
by
explicitly
override
them.
B
So
you
could
actually
flip
the
behavior.
That's
not
something
that
is
a
like,
of
course,
an
area
or
anything
like
that.
But
as
pseudo
could
be
pseudo
useful
for
something
that
it
just
kind
of
falls
out
because
of
the
semantics
and
then
they
ignore
read-only.
This
is
pretty
common,
I
think
request
to
say:
don't
serialize
properties,
I,
don't
have
better.
F
A
B
A
B
A
B
F
B
Well,
since
said,
only
it
won't
be
yeah,
it
won't
be
serialized,
of
course,
but
it
could
be
used
funny
or
it
just
does
I
guess
what
would
be
natural.
You
have
the
data
a
little
said
it
non-special
logic.
B
H
Thing
that
I
think
that
is
a
little
bit
confusing
about
ignore
viewed
only
is
that
it
only
makes
sense
when
applied
at
the
class
level.
Yes,
because
you
don't
need
ignore,
read
only
you
could
just
say
ignore
this
property,
because
it
is
real.
That
is
so.
It
only
makes
sense
either
as
a
global
setting
or
as
a
class
level.
Yeah.
B
D
D
C
D
B
F
A
Believe
that
the
default
of
civilizing
we
don't
want
properties,
is
a
good
idea.
Yes,
well.
J
H
Think
about
think
about,
like
two
years
from
now,
if
they
do,
the
records
feature
for
C
sharp
because,
like
the
DTO
is
that
people
write
if
you're,
using
no
mobility
checking
just
like
but
make
you
sad
right
like
they're
all
every
every
detail
you
have
is
a
warning
about.
You
have
a
constructor
that
doesn't
set
these
properties,
so
something
like
this
really
wants
records.
If
you're
using
no
ability
like,
if
you
care
about
that,
you
will,
you
will
want
to
use
records
or
if
the
sterilizer
and.
J
B
H
Thing
to
think
about,
in
terms
of
in
terms
of
having
multiple
options
on
one
attribute
is
you
do
have
this
idea
of
scoping?
You
do
have
this
idea
that,
like
settings
are
applied
globally
versus
at
the
class
whole
property
level,
it's
like
well
what?
If
I
write
a
class
and
I,
don't
know
what
the
setting
is
application
level
or
at
the
Assembly
level,
when
I
wrote.
H
B
A
D
B
Any
any
attribute
currently
that
you
can
apply
to
a
class
might
be
in
the
same
namespace
our.
So
if
it's
a
base
class,
perhaps
that
should
be
somewhere
else.
We
can
hide
it.
So
there's
this
policy
namespace,
that's
intended
for
people
that
are
adding
new
attributes
and
things
like
that
hides
a
few
same
as.
B
D
D
You
know
we'd
have
to
pull
it
out
a
system
that
takes
time
yeah,
because
you
know,
like
some
people,
will
just
hear
that
we
release
system
text
up
JSON
package.
They
will
naturally
go
to
the
root
namespace
and
find
very
complicated
types,
but
I
mean.
Should
we
have
a
sudden
coming
system
text
json,
dot,
leader
yeah,
something
like
this
I
mean
it's
unfortunate
that
either
doesn't
work
for
the
writer
or.
B
D
A
Dependent
future
yeah,
it
should
just
take
a
holistic
set
and
then
just
shovel
things
along
perfectly
to
see
what
we
like
and
then
just
be
named.
Okay,
I
guess,
I'm
kind
of
Nutter
issue.
For
that
then
yeah
I
just
didn't
know.
We
should
just
set
up
a
meeting
like
no
or
maybe
in
this
go
with
a
list.
Okay,
I'm
participating,
I
want
Creighton
issue.
B
So
this
hasn't
three
main
types
of
functionality.
It
allows
you
to
specify
a
name
of
a
property,
and
so
just
gonna
say
this
is
always
called
foo,
ignoring
casing.
Whatever
I
mean
you
just
wanted
one,
it's
supposed
to
say,
naman
or
you
can
apply
an
attribute
that
knows
how
to
convert
a
name
in
this
case
we're
going
to
provide
a
default
implementation
for
camel
fees,
and
then,
if
you
wanted
to
extend
this
or
something
there's
a
base,
the
base
attribute
of
this
here
will
allow
you
to
do
that.
B
K
F
B
A
B
B
K
D
A
A
This
one
comes
from
the
building
one
like
at
that
point:
you're,
probably
better
off
just
saying
screw
it
I
just
go
to
the
top
I'm
named
everything
of
platform,
time
everything,
the
other
one
and
then
I
just
have
some
sort
of
prefix.
That
I
can
reason
about.
Otherwise,
you
just
I
mean
first
of
I,
don't
think
it's
very
likely
that
people
do
that
and,
secondly,
the
people
that
do
do
it
probably
want
to
understand
which
IT
becomes
or
just
they're
fully
qualifying
with
the
namespace.
Well,
I
would
probably
do
using
it.
D
B
Yeah
I
think
the
biggest
difference
is
that
the
reason
why
one
big
attribute
with
a
bunch
of
settings
doesn't
work
very
well
is,
if
you
have
a
concept
of
defaults
on
the
class
type,
then
they'd
be
it
didn't
have
to
be
nullable
like
ahead
and
I'm
gonna.
Be
this
example,
because
you
don't
want
to
necessarily
plot
defaults
on
ten
things.
You
know
fish
up
there
like
pools
and
things
like
that
that
will
have
a
normal
default
value.
G
A
Lex
think
about
this
video
if
they
attribute
a
flat
at
the
class
and
at
the
property
right
now,
you
basically
have
to
decide
for
a
given
setting.
Let's
say
ignore
now
evade
you
like,
maybe
what
you
applied
at
the
class
level.
You
only
meant
to
say
you
know
ignore
read-only,
so
you
only
said
ignore
read-only,
you
didn't
say
you
didn't
mean
to
say,
ignore
not
ignore
null
values,
but
if
it's
a
bool
like
it's
either
true
or
false
right,
but
neither
of
these
things
are
the
actual
setting
you
meant
to
apply.
A
K
So
n
n
go
stand
on
it
just
for
some
context
about
how
it
works.
Jason
property
has
severed.
Jason
property
has
17
properties
on
it,
so
it's
quite
a
big
boy
and
I.
Don't
know
if
you
talked
about
this
earlier
around
the
ignore
property,
but
nullable
attributes
aren't
really
allowed
on
nullable,
noble
types
and
allowed
on
attributes
just
because
it's
not
a
constant
expression,
etc,
etc.
K
So
what
I
do
is,
although
the
property
on
Jason
property
is
not
nullable
I
track
internally,
whether
something's
been
set
on
it,
so
the
internal
fielders
know
and
if
it
isn't
set,
then
I
assume,
there's
no
there's
no
value
for
it,
and
then
I
can
look
to
the
parent
class,
for
example,
to
then
use
its
value.
So
if
you
haven't
set
a
what
would
be
an
example
on
it,
I
get
a
behavior
for
how
it
handles
when
there's
a
null
value.
K
K
K
B
Okay,
yeah
so
I'll
follow
up
on
that
then,
like
I
said,
I
wasn't
running
any
issues
with
the
prototype.
They
did
this
okay,
so
I
mean
that
that
is
something
to
think
about.
If
we
want
to
do
if
we
want
to
have
a
uber
property
attribute
and
I
in,
like
I
said
I
had
that
previously
it
contained
everything
on
for
a
property
except
for
extensible.
B
Things
like
this
camel
casing,
because
you
can't
I,
don't
want
to
put
an
enum
on
that
property
and
just
say
you
know:
do
you
want
camelcase
in
our
snake
casing
or
whatever,
because
then
you
know
ties
it
to
a
fixed
set.
So
the
idea
was
at
that
point
to
have
one
big
attribute
and
then
for
the
extension
points
you
know,
would
have
their
own
attribute.
Well,.
B
Yeah
you
could
do
both
yeah
I
I
did
I
didn't
take
that
approach,
also
because
we'd
only
hit
with
one
right
away.
It's
a
little
goofy
I'd
have
Amina
with
one.
A
Value
I
just
tested
it
means
is
where
I'd
like
the
compiler
it
lets.
You
declare
the
Malibu,
but
then,
when
you
as
soon
as
you,
try
to
assign
the
property
and
constructor
of
the
or
the
construction
syntax
when
you
apply
the
attribute
says
ignore
is
not
a
valid
named
attribute
argument,
because
it's
not
about
it
at
speed,
parameter
five
because
they
basically
have.
A
C
K
A
D
L
A
Can
do
it
I
mean
I
mean
you
can,
but
basically
the
way
you
would
do
this.
You
would
just
you
that
you
look
at
the
customer
to
view
data
and
you
can
ask
that
guy,
but
what
initializes
your
present
I
mean
it's
pretty
straightforward
to
do
that.
What
do
you
have
to
translate
it
in?
From
that
point
of
view,
which
is
also
not
horrible?
Honestly,
it's
actually
kind
of
what
he
would
have
to
do.
Anyways
if
you
would
customer
to
Big
Data
yeah.
D
A
Well,
not
really
because
if
you
split
it
up
into
multiple
attributes,
yes,
you
can
use
the
presence
of
the
non
presence
of
the
edge
of
identification
for
that
right,
because
if
you
apply
something
at
the
property
level-
and
you
have
basically
one
attribute
for
camel
casing
it
another
attribute
for
ignoring
you.
And
then
you
never
have
this
problem
that
you
have
to
merge.
Settings
didn't
mean
to
set
across
hierarchy
boundaries
because.
A
D
A
D
A
D
B
H
So
so
in
our,
in
our
experience
with
just
having
camel
casing,
be
the
default
various
banette
far
less
important
to
need
to
configure
these
things.
If
the
default
is
work
well,
little
do
people
have
do.
We
have
important
scenarios
where
they
need
to
be
pascal
case.
Is
there
like
a
rationale
for
that.
K
H
K
Just
because
Jason,
like
I,
thanked,
Jason's
ubiquitous
and
beyond
just
JavaScript
like
I,
think
JavaScript
we
like
to
have
camel
case
but
I
think
or
a
general
serializer
Pascal
case
is
fine
and
in
cases
where
you're
focused
on
JavaScript,
you
can
add
a
camel
case.
Converter
and
mend
user
I
got
I
I,
think
not
applying
a
name
and
standard
is
what
I
like.
But
this
is
my
opinion.
D
G
F
A
I
mean
there's
something
where
I
honestly
don't
have
strong
opinions,
but
I
mean
if
you
I'm
a
dog
net
side.
It
makes
sense
right,
but
the
but
the
question
is:
does
it
make
sense
that
the
seller,
when
you
consider
an
all
web
side
where
you
consume
the
peddler
from
Davos
good,
where
just
is
very
unnatural,
to
have
yeah.
D
B
A
A
A
A
D
But
maybe
you
should
do
it
aren't
basically
saying
like
if
we
choose
the
default
to
be
pascal
case,
it
will
be
the
wrong
default
for
us
all
many
people
right
and
then
they
will
have
to
like
find
the
attributes
to
add
an
attribute
understand
how
this
whole
attribute
thing
works,
which,
by
the
way,
is
not
super
intuitive
in
general
that
I'm
calling
methods
to
where
the
attributes
on
some
options
time.
Only
if
you
can't
find
that
design
well-
and
you
know
for
this
thing-
I
cannot
I
have
my
pocket
eyes.
A
A
All
I'm
saying
is
that
basically
I
think
that
I
think
there's
two
arguments
right
I
think
nobody
disagrees
so
that
we
should
have
a
global
setting.
The
control
casing.
I
think
we
all
agree
with
that.
Now
we're
just
talking
about.
What's
the
mechanical
way
to
express
that
in
the
current
model,
the
idea
is
everything
is
basic
about
to
be
that's
why?
Which
means
any
setting
that
you
can
apply
our
an
attribute.
A
You
can
also
make
it
a
global
setting,
but
just
calling
this
one
method
now
we
could
say
that
screw
it
there's
some
settings
that
are
way
more
common
than
others
and
we
promote
them.
That's
fine!
All
that
means
is
that
now
you
have
two
ways
of
doing
it.
In
other
questions
like
which
one
takes
precedence
and
all
of
that
right,
so
the
like
I
will
honestly
say
my
care
level
is
low.
I
agree
with
you,
though,
that
and
one
I
don't
like
I,
don't
like
mixing
the
attribute
model
with
against
global
state.
A
D
D
L
D
D
D
H
B
D
B
No
I
meant
like
if
you
can't
use
a
design
time
attribute,
for
whatever
reason
you
probably
are
familiar
with
the
design
time
attributable,
because
you
can't
use
it
and
you
have
to
use
again
so.
D
D
D
D
B
A
A
For
example,
people
don't
like
attributes
right,
so
we
would
really
like
convention
based
configuration,
so
I
think
it
good
chunk
of
people
will
try
whatever
it
takes
to
boil
putting
attributes
on
the
actual
types
that
would
just
try
to
configure
all
the
state
that
they
can
buy
at
this
instance,
and
then
just
say
this
is
how
I
want
my
to
look
like
this.
Is
the
policy
I
won't
avoid
I'm.
A
I
think
no
I
think
there's
like
different
schools
of
thought.
All
right,
some
some
people
say
well,
my
wire
format.
I,
don't
want
global
state.
I
want
everything
to
be
on
the
class,
because
then
I
can
reason
about
what's
happening.
I
don't
have
to
look
at
two
things.
The
other
people
say
no
I
will
to
minimize
the
lines
of
code
that
I
write
in
my
in
my
details.
A
I
don't
want
any
attribute
said
because
they're
ugly
I
just
want
to
have
a
continuation,
some
essential
that
says
use
the
policy
that
I
want
either
I
ignore,
be
the
only
I
don't
set
them.
I've
come
with
case
or
whatever
the
thing
is,
then
all
my
just
looks
the
same
way
and
I
think
I
honestly
think
so
just
different
ways
of
doing
things
I
think
they
are
both
fine.
It
just
means
that
you
may
have
customers
who
will
never
use
attribute,
let
that
might
just
be
so.
A
D
We
would
very
strongly
prefer
not
to
have
an
attribute
on
the
modern
times,
and
the
reason
is
that
the
fact
that
these
things
are
serialized,
this
I
realize
is
just
an
implementation,
because
when
you
look
at
the
API,
you
call
something
like
you
know:
do
something:
I
will
do
something,
and
then
you
get
an
object
graph
and
I
would
wander
off
the
graph
to
like
not
have
artifacts
that
are
for
internal
implementation.
Detail
of
us
moving
bullets
per
second.
So
what
about
the
scenario.
E
D
We
talked
about
this,
and
I
would
prefer
a
model
where
there's
a
whole
bad
and
basically
I
get
to
do
some
transformations
that
I
want.
So
by
default.
You
know
by
different
to
serialize
and
just
reuse,
Park
or
some
convention,
and
maybe
I
change
the
setting
that
I
want
to
kind
of
casing
to
be
changed
to
this
or
something
you
know
using
the
options
and
then
for
like
very
fine
control.
I
would
prefer
to
happen
kohlberg,
and
I
do
whatever
I
want
with
the
property
the
property
is
called
for.
E
G
E
Maybe
they
attributed
tomorrow,
isn't
for
them,
so
I
want
to
actually
poke
at
what
Steve
said,
which
is
like
you'd
be
inclined,
did
not
have
attribute
for
right
now
before
everyone
yeah
exactly
for
everyone.
So
you
feel
it's
like
it's
just
stop
or
not
to
have
attributes.
If
we
go
to
the
model
that
as
you're
with
the
first.
D
D
H
Right
so
we
change.
We
change
like
what
we
do
with
today
with
Jason's
on
that,
as
we
change
camel
casing
and
we
change
a
couple
of
security
settings
to
be
basically
secure
enough
of
the
web
and
that's
the
extent
to
which
we
customize
and
the
rest
is
up
to
these
look,
what
they
want,
and
they
can
both
customize
the
global
settings
that
we
own
and
manage,
and
they
can
customize
their
own
type.
I.
A
A
I
think,
like
attributes
in
civilization,
are
just
so
standard
that
I
think
not
having
them
at
all.
It
seems
good
over
the
top,
but
I
mean
I
would
like
to
see
what
it
would
look
like,
because
we
also
said
earlier
that,
even
if
you
have
attributes
do
we
want
the
programming
model
on
the
options
class
mirror
that
right,
because
if
you
don't
have
the
meat
I,
presumably
have
some
other
way
of
doing
it.
That
seems
more
natural
in
that
case,
so
it
would
be
just
seem
to
just
look
at
it
and
see
like
what
that.