►
From YouTube: .NET Design Review: JSON Serialization
Description
We'll review the new lean & mean JSON serialization/deserialization for .NET Core 3.0. This time, we're focusing a bit more on the shape of the data types and attributes.
https://github.com/dotnet/corefx/issues/34372
B
C
D
On
this
title
page
here
are
you:
are
you
streaming
YES
on
this
title
page
I
did
add
a
bullet
that
was
requested
about
expectations
for
using
Jason
net
versus
this.
So
that's
the
I
guess
under
the
first
main
bullet,
read
that
basically
I
mean
one
of
the
reasons
why
we're
doing
this
is
so
that
we
can
replace
a
subset
of
people
using
a
subnet.
So
anyway,
I
just
made
that
explicit,
as
was
asked
for
the
last
review,
that's
the
only
changes
on
the
top.
D
D
Basically,
everything
stays
the
same,
except
for
the
naming
here
in
a
typo
or
two.
So
instead
of
Jason
converter,
Dodd
from
two
methods
is
Houston
serializer,
dot,
readwrite
methods,
some
of
the
parameter
names
changed
to
say
like
utf-8
JSON,
instead
of
just
JSON,
for
example,
or
just
reader
or
just
writer,
otherwise,
I
guess
I'll
just
wait
a
minute
until
everyone
kind
of
absorbs
this
and
in
March
the
comment
time.
E
Sorry,
what
would
sure
they're
reading
the
reads
and
writes
the
right
that
returns
by
terrain
yeah
was
weird
how's
it
normally
when
you,
when
you
write
you
write
to
something.
If
you,
if
you're
getting
something
back,
you
do
it
too
number
difference.
I
mean
it
makes
sense
for
the
read
and
write
to
be
like
named
that
way,
because
they're
taking
a
stream
or
whatever,
but
if
you're
returning
the
actual
thing
that
you've
written
yeah,
it's
normally
to
blah,
you
know
ride.
The
name
implies.
E
B
Think
originally
they
leave
it
of
the
other
way
around,
but
if
everything
was
to
Jason
and
then
giving
the
feedback
and
said,
we
don't
want
this
for
the
other
ties,
but
I
think
this
is
probably
an
example
where
we
should
go
the
other
way
around
again
right,
because
I
think
it
would
be
easier
to
understand
this
way.
E
C
C
E
E
E
C
C
D
B
Other
questions
like
is,
it
is
the
other
one
efficient
though
like
imagine
you
getting.
Your
spine
is
not
big
enough,
like
on
all
the
other
HP
has
given
that
you
say
how
many
bytes
you
have
written.
You
can
at
least
resume
this
one
basis
to
resume
the
visualization,
probably
I,
don't
think
I
can
incrementally
see,
let's
not
drag
rather
than
any
say
any
way.
It.
I
E
B
I
B
E
C
D
B
H
B
B
The
reason
I
bring
it
up
is
because
it's
the
same
discussion,
I,
have
a
father
and
an
are
speakers
that
well
how
low
do
we
want
I
breed
a
vibrator
to
be,
and
how
old
do
we
want?
This
live
it
to
be
right,
because,
right
now
we
can
either
say
the
Jason
lever
depends
on
the
pipes
or
we
can
say.
Pipes
depends
on
Jason
because
have
to
put
the
API
somewhere.
G
B
C
E
Yeah,
so
the
the
right
that
returns,
the
bytes,
maybe
the
right
verb
on
that
one.
It's
serialize
and
it
shouldn't
look
like
a
semi
overloaded,
the
other
guys,
the
second
set
of
weed
methods,
the
ones
that
are
tasks
of
object,
their
their
input
parameters,
are
inconsistent.
They
should
be
utf-8
Jason
to
match
all
the
other
overloads
yeah
and
should
have
returned
by
your
task
of
teeth
of
Steve
said
test.
Yeah
are
the
for
the
worth
of
eternity.
He's
a
hospitable
to
earn
non-generic.
K
White
I,
can
you
can
hear
me?
Yes,
okay,
yeah,
so
in
the
previous
iteration
I
think
read,
async
was
returning
tasks
and
write.
Async
was
returning
value
tasks
or
something
like
that
right
and
my
back
was
well
write.
Async
task
is
fine
unless
you
can
easily
be
very
complicated,
but
for
read
async,
it
really
depends
on
whether
you
expect
these
to
be.
K
You
know
quickly
completing
like,
if
you
can
give
this,
if
you're
able
to
pool
the
pipe
rider
and
stream
or
if
you
expect
that
the
you
know
an
individual
typewriter
stream
is
going
to
contain
multiple
things
to
do
serialized
one
after
the
other
or
some
such
thing,
then
Rick
and
if
the
reading
is
likely
to
complete
synchronously,
which
seems
reasonable
for
small
payloads,
like
tasks
can
make
a
lot
of
sense.
Yeah.
H
E
Pipe
is
cooled
for
the
entire
connection
I'm,
for
it
operates
me
to
is
pool
/
HP
to
stream,
so
you
get
the
same
type
incidents
across
different
requests.
We
reuse
them
over
and
over,
but
but
the
isin.
The
main
case
is
that
that
the
buffer
will
actually
have
the
panel
fully
in
memory
before
Kali
read
a
bunch
of
cases,
but
should
finish.
Singly
in
I
expect
common
cases
where
the
you're
sending
a
small
payload
from
the
client
yeah.
K
E
K
If
it's
synchronously
completing
that's
not
the
case,
so
if
it's
a,
if
it's
the
non-generic
it
all
your
task,
that's
the
case.
That's
all
right,
because
if
it's
completely
synchronously
you
can
just
return
test.
I
completed
task
versus
defect,
but
if
it's
a
returning
thing,
so
a
value
task
of
T
versus
task
of
T,
if
it's
synchronously
completing
in
one
case,
you
generally
need
to
allocate
a
task
and
the
other
you
don't.
So
that's
why?
When
we
initially
introduced
value
test,
it
was
entirely
about.
We
didn't
have
the
non
generic
one
and
it
was.
K
D
K
There
are
no
well,
there
are
no
more
weights
that
you
so
basically
yeah.
So
if
you,
if
you
will
even
await
a
hundred
things,
but
if
all
the
things
you
awaited
we're
already
complete
by
the
time
you
awaited
them,
then
your
methods
gonna
complete
synchronously.
So,
for
example,
you
read:
if
you
await
memory
stream
done,
read
async
that
will
that
we,
they
sync,
is
always
gonna
complete
synchronously,
because
there's
no
actual
asynchrony
there.
K
So
when
you
await
it,
if
your
weights,
just
gonna
kind
of
be
in
know
off
you're,
just
gonna
fly
right
through,
it
call
get
results
and
keep
running
on
another
stream,
like
you
know,
buffered
stream,
for
example,
or
file
stream,
which
has
a
buffer
in
it.
You
know,
if
you're
reading,
let's
say
one
byte
at
a
time,
and
it
internally
contains
a
buffer,
that's
80,000
bytes,
then
seventy,
nine
thousand,
nine
hundred
and
nine
nine
of
your
weeds
are
gonna
complete
synchronously.
It's
only
you
know.
K
D
K
Inflating
in
the
relays
in
case
an
asp
net
from
david's
comments,
it
sounds
like
the
pipe
reader
is
likely
are
gonna
contain
several
k
worth
of
data
by
the
time
read,
async
is
called,
and
so
when
it
goes
to
read
from
that
pipe
reader,
you
know,
even
though
it's
awaiting
those
awaits
are
gonna
complete
the
thing
they
await
the
awaited
thing
is
going
to
be
already
complete
by
the
time
you
wait
it
so
those
awaits
aren't
actually
introducing
any
asynchrony
and,
as
such
read
this
read.
Async
will
likely
also
complete
synchronously.
K
K
The
the
right
a
sinks.
So
if
you
have
a
non-generic
asker
value
task,
then
there's
no
there's
no
benefit
to
value
tasks
or
completing
synchronously,
because
you
can
just
return
past
on
completion
tasks
and
there's
actually
some
negative
value
to
return
value
tasks,
because
it's
actually
bigger
I
guess
you
know
two
pointer
size
instead
of
one
pointer
size.
So
when
it's
stored
in
the
caller
state
machine
is
actually
gonna
make
their
state
machine
bigger.
Now
in
the
grand
scheme
of
things,
does
that
matter?
Who
knows?
G
K
L
K
D
Okay,
so
is
the
thinking
man
for
the
read
a
cig
methods.
We
were
turned
belly
task
of
object,
yes,
I'm
back
task
of
t-value,
yeah,
okay
and
but
for
the
rights
just
leave
them
as
they
are.
C
D
Yeah
we
are
there's
a
default
buffer
size
on
the
options
class
and
if
it's
specified
will
use
that,
otherwise
we
use
16,
K
and
so
will
allocate
initial
memory
pool
buffer
and
then
grow
that
as
needed.
And
then,
when
we're
done
copy
it
into
the
proper
sized
library,
yeah.
C
G
H
H
G
H
E
E
H
C
C
E
C
I
Also
is
going
to
mess
up
things
because
then
you
can't
reuse
the
buffer.
If
you
return
a
memory
of
T
from
the
backing
buffer
and
don't
do
the
copy,
then
you
have
no
clue
when
the
user
and
hanukkah
and
then
so
you
can't
reuse
the
buffer.
What
do
you
mean
because
of
different
from
returning
birth
today,
because
that's
something
that
the
user
owns
we're?
Creating
a
new
array?
Copying
it
and
saying
you
know
on
this
vs..
I
K
There's
a
difference,
there's
a
difference,
though
in
the
case,
if
you
can
I
get
a
an
ADK
buffer
from
the
array
pool,
I
write
five
bytes
into
it,
and
then
I
say
you
know
a
new
array
for
those
five
bytes
I
get
to
keep
reusing
my
ATK
buffer,
that's
probably
Gen,
2
and
so
on
and
just
returned
my
new
allocated
by
byte.
If
I
instead
take
the
ATK
buff
route
of
the
pool,
all
right,
five
bucks
bites
into
it
and
return
back
wrapped
in
a
memory
I'm
now
handing
back
ad
hey
where
the
am.
D
B
B
B
I
B
H
H
E
It
hats
it
because
you
have
to
go
from
the
array
pool
yeah
to
lucky,
but
for
any
way
to
return
the.
What
why
I'm
saying
is
that
if
you
use
a
heap
allocated
pool
about
anything
in
the
first
place,
there's
a
copy
required
back
to
you
right
into
it.
You
just
pass
the
bucket
back
to
the
user
right,
otherwise,.
E
H
E
B
The
value
of
this
API
is
not
high
performance,
but
I
think
this.
It
cannot
be
our
primitive,
the
Licking
but
other
things
on
top
of
right,
because
it
we're
not
going
to
be
efficient.
If
we
really
want
the
primitive
operation
that
we
can
implement,
other
things
like
fire
breather,
pipe
writer
on
top
of
it
needs
to
be
something
like
the
state
API.
We
talked
about
all
right,
so
anything
I
do
here.
B
It's
all
about
people
for
whatever
reason
today,
I
need
to
eat
by
the
Rays,
because
that's
how
the
system
exchanges
things
so
formally,
whatever
you
do
with
this
video
is
not
going
to
be
efficient
anyway.
So,
like
I,
think
what
this
API
is
purely
for
interoperability
and
some
amount
of
convenience
and
I
would
say
that
yeah
we
should
not
be
super
inefficient,
but
I
also,
don't
think
we
need
to
be
super
efficient
either
like
we
can
probably
get.
K
E
E
But
you,
wouldn't
you
thought
yeah,
okay,
three!
You
guys
dream
it
guy
right.
So
this
is
the
this.
Is
somebody
who's,
just
writing
a
simple
little
application.
They
want
to.
They
they've
got
this
object
and
they
want
to
see
realize
it
even
for
whatever
reason
they
think
that
they're
want
the
bytes
back
afterwards,
instead
of
just
writing
it
to
an
output
stream.
I
think
that
the
the
extra
copy
your
data
copying
memory
is
fast,
it
was
fit
to
a
high
waiting
on
epoxy
is
not
good,
though
I
think.
D
H
We
don't
have
any
I
actually
came
in
correctly
on
this
I.
Don't
think
we
have
any
api's
in
the
framework
that
just
out
of
whole
cloth
create
a
memory
of
teeth
backed
by
the
TRA
and
to
you
correct,
I,
don't
think
we've
had
I,
don't
think
we've
added
any.
Yet.
My
guess
is
that
we
usually
have
right
to
span.
E
Thing
is:
there
are
some
cases
where
you
need
to
call
it
yeah,
because
you
want
to
send
bytes
somewhere
else,
so,
for
example,
in
Sigma
for
edits,
we
can't
actually
write
to
this
stream,
because
the
client
may
be
on
to
the
machine
yeah
so
but
get
put
into
a
biter.
It
didn't
get
sent
up
the
wire.
The
best
way
that
you
would
do
that
is.
You
would
use
a
memory
stream.
You
would
reallocate
your,
but
for
you
a
call
right
in
the
stream,
you
send
your
data
out.
You
reset
it
to
zero.
E
B
Was
about
draws
like
who's,
the
consumer
does
API
because
it
seems
whatever
scenario
it
is.
It
seem
contrived
like
what
are
the
scenarios,
but
you
cannot
manufacture
it.
Stream
will
be
very
slim,
I
mean
worst
case.
You
create
a
memory
I,
don't
we
say
that
we
want
to
just
delete
it
and
they
use
memory.
Yeah.
M
C
E
I
H
I
H
H
An
underdog,
so
you
have
you,
have
in
your
in
your
code.
You
have
a
local
who's,
compile
time
who
statically
determined
height
is
person,
but
the
actual
runtime
type
of
it
is
employee
or
manager,
and
maybe
it
also
has
properties
like
salary
and
stuff
on
it
that
you
don't
want
going
out
across
the
water
deep,
if
you
were,
if
you're,
calling,
if
you're
using
the
generic
type
inference
and
calling
any
of
the
right
methods
that
are
generic,
the
T
value
in
this
case
is
going
to
be
person,
because
that's
what
is
statically
known
there?
We.
E
C
E
B
I
B
I
think
I
think
in
crystals
defense,
though,
like
if
you,
if
you're
aware
of
what's
going
on,
they
can
could
do
the
exact
same
thing
about
you
know.
Abusing
the
time
system
you
could
just
have
you
know,
suppress
civilization,
attributes
on
the
properties
or
whatever
it
so
like.
If
you
design
your
hierarchy
well,
think
it's
not.
M
B
B
I
C
C
E
H
Perspective,
that's
the
only
option
this
PK
here
by
the
way,
then
this
this
behavior,
where
you
specify
the
static
type
as
opposed
to
the
runtime
type,
is
the
same
behavior
used
by
data
contract,
serializer
adjacent
on
that
XML,
stabilizer
MV,
so
normal
binding,
it's
used
by
a
its
you'll,
identify
middle,
so
I'm,
not
in
Oh
II.
Don't
know
I'm
good
time
does
by
default.
When
you
use
the
when
you
use
these
statically
typed
members
or
the
statically
type
sterilizer
I
would.
D
B
C
Know
we
won't
just
focus,
it
doesn't
know
the
way
I
will
design
the
future
is
by
default,
it's
Paco
and
then
the
moment
you
said
you
want
to
select
which
properties
you
don't
realize
or
utilize.
Then
there
is
a
feature
that
is
very
powerful
and
lets
you
do
everything
that
you
would
want.
The
problem
is,
we
now
have
like.
We
have
the
series
Paco
and
then
we
have
one
feature
to
select
field,
that
it's
not
very
big
symbol.
H
E
C
C
H
E
It
have
a
call
site.
It's
like
there's
a
bug
halt
over
binding,
that's
typical
in
web
applications.
Really
you
declare
your
your
your
object
as
input.
I
think
we
can
over
by
it
two
things.
I
didn't
expect
to
be
doing
the
first
place,
so
you
say
find
these
five
things
only
yeah,
but
that
I
mean
it
gets
for
both
right
really
fast.
So
I'm
not
so,
yes,
no!
No!
What.
C
I'm
saying
is
now
we
have
a
teacher
that
basically
adds
complexity
to
the
AP
is
doesn't
solve
the
problem.
So
if
you
happen
to
have
a
hierarchy
where
the
base
type
actually,
because
the
properties
that
you
want
to
serialize
and
subtype
dancin.
Well,
then
this
feature
works,
but
as
you
we
just
observe,
don't
design
hierarchies
are
sorry,
they
don't
think
about
civilization.
So
sooner
or
later,
we'll
run
into
a
case
where
you
know
people
are
civilizing.
E
M
E
D
L
D
Have
you
know
the
customer
employees
scenario
or
person
customer
or
whatever?
We
only
know
how
to
sterilize.
You
know,
that's
the
static
type.
You
know
we
don't
know,
because
we
don't
put
the
name
of
the
type
in
the
JSON
a
lot
of
other
serious
ladders.
Do
that
we
don't
and
we
don't
know
what
sir
lies.
D
So
it's
kind
of
somewhat
symmetric
by
not
supporting
it
on
right,
because
we
can't
support
it
on
read
and
I
think
there
is
an
option
and
I
note
that
in
the
section
that
I
referred
to,
that,
we
could
enable
this
as
an
opt-in
model
to
basically
call
get
type
on
every
object
that
you
pass
in
here
up
front
or
any
any
object
returned
from
a
collection
or
from
a
property
to.
E
G
E
F
C
C
B
B
G
E
M
E
E
D
E
D
D
D
D
G
E
B
H
B
C
C
B
H
E
E
H
E
E
So
read
and
read:
acing
and
we
so
reads
would
be
sequence
of
bytes
span
of
bytes
and
string
and
read.
Acing
is
Mike
reader
and
stream
and
I
knew
this
when
you
come
to
our
spot
for
the
first
time
when
you
use
this
thing
and
you
Regan
tutorial,
you
do
distance,
Eliezer,
dot,
read
thought
read
about
ox,
90
I,
think
it's
strength,
payload
and
then
for
right.
You
called
to
strength
yeah.
K
B
H
B
B
D
I
do
think
that
if
we
don't
bite
array
overload
here,
you
know
people
who
well,
they
have
to
do
a
lot
of
extra
work
to
use
memory
stream
and
the
probably
just
couldn't
be
calling
the
string
versions
and
then
decoder
encode,
which
would
suck.
E
E
K
H
H
G
H
C
E
E
G
E
Here's
the
problem
like
when
you're
reading
Jason,
which
is
just
unstructured
like
no
that's
prefix
kind
of
thing,
like
there's,
no
way
to
know
how
much
your
son
wants
to
be
trying
when
you
pass
and
it
needs
to
return
like.
Can
you
explain
the
problem
again?
This
assumes
that
you
pass
in
the
encourages
and
hey
look,
trimmed.
E
E
H
E
Wouldn't
no
no,
but
the
problem
is
when
you
get
a
payload
back:
no,
it
isn't
the
whole
it
isn't
just
in
payload.
You
pass
it
in
to
this.
Guy
either
throws
so
our
research
scenario
where
you
have
Jason
in
the
middle
of
something
that
you
don't
have
either
a
mime
content,
delimiter
or
link
time
to
uploads.
For
example,
you
send
a
hex
prefix
of
the
length
of
the
chunk
janna
payload,
so
you
send
the
first
4k
as
like
a
chomping.
Even
the
second
forget
the
jump
then.
E
I'm
saying
in
this
overload
does
not
work
well
for
that
use
case
at
all,
because
it
this
can't
if,
if
the
color
has
to
know
what
the
entire
pill
is
before
passing
in
it
can't
work,
we've
been
use
pipes
so
that,
like
they
were
spying
for
my
boyhood
sure
it's
for
the
person
that
doesn't
work
and
I'm,
not
sure
what
that
scenario
is
like
what
case.
Nothing.
It's
working
well,
so.
C
C
E
E
D
E
D
E
C
G
E
C
E
G
B
E
We
get
usages
for
I
know
it
starts
here
and
let
me
know
where
it
ended.
We
can
have
that
later
yeah.
But
for
me
this
is
the
I
think
what
most
people
who
are
going
to
call
something
like
this
or
they
expect
that
they
have
a
full
payload
with
nothing
trailing
and
let's,
let's
go
with
the
easy
scenario
first,
and
we
can
do
the
more
powerful
one
if
we
get
customers,
you.
B
E
E
We
would
that
one
would
read
the
first
one
and
in
soon
as
it
hits
about
once
static
stated
we're
just
telling
how
far,
and
that
would
be
fine
but
I.
Don't
I
think
that
the
average,
the
average
expectation,
then
would
be
that
the
collar
of
that
would
say.
Oh
well,
if
you
didn't
read
the
whole
thing,
then
throw
so
we're
just
going
to
do
that
now
and
if
someone
wants
to
partial
read
later,
we
can
add
a
wrap.
C
E
E
E
L
K
E
L
H
Strength,
but
we
have,
we
have
string
parsing
so
about
that
scenarios
fulfilled
yeah,
but
I
think
actually
the
listen
area
that
Jerry
mentioned
is
is
useful,
like
I
call
file,
dot,
read
all
bikes,
I
have
a
bite
or
a
pacifier,
your
black
everything
well
ice
cream.
The
the
vast
majority
of
people
I
think
like
don't
want
to
deal
with
streams.
They
sink
anything.
She.
H
E
H
H
B
H
H
But
it's
it
allows
you
to
plug
in
a
custom
one
via
a
global
registration,
at
least
in
full
framework.
Normally,
then,
nothing
is
been
eager,
yeah
I'm,
a
deep
thinker.
You
can
pass
it
as
an
option,
but
again
it
would
be
very
much.
He.
H
Only
need
to
be
there
in
there
well
the
default.
One
also
escapes
things
like
open
and
close
angle
brackets,
even
though
Jason
doesn't
require
them
to
be
escaped
because
it
assumes
that
you
might
put
it
inside
HTML
and
it
does
that
as
a
defense
in
depth
mechanism.
I
think,
and
you
could
replace
that
behavior
I
guess
if
you
wanted
to
interesting.
B
H
H
H
E
Probably
it
would
be
an
option
on
Jason
around
the
Jason
writer
options,
which
is
the
field
of
Jason
serialization,
but
yeah
yeah,
and
you
have
a
question
about
this
thing.
Miata
class
is
there
knows
the
anywhere
well,
every
method,
complete
sorrows,
yeah
yeah
I'm
wondering
if
there
are
any
force
allocations,
because
there's
because
this
thing
of
this
people.
D
Jason
serializer
optional
has
a
bunch
of
cash
state,
but
there
might
be
a
feature
in
the
future
like
if
you
want
to
have
some
overflow
properties
returned
at
the
end
of
all
or
write
or
read
method.
You
know,
then
there
might
be
an
extra
argument
on
these,
but
yeah.
Currently,
there's
no
other
state.
It's
a
clean
involved.
You.
D
It's
sorta
statically.
If
he
used
a
seer,
sterilizer
options,
dot
add
attribute,
then
the
cash
moves
to
the
instance
of
the
options
class.
D
F
B
C
B
Well,
not
just
the
tribe,
also
the
methods
on
the
egg.
If
you
want
to
make
the
simple
type,
which
is
what
Jason
does
that
didn't
convert,
that
naming
convention
will
very
quickly
fall
on
the
face?
No
because
no
like.
Well,
all
the
good
names
are
not
taken
by
static
methods.
You
know
it's
the
same
signature,
so,
oh
that's
because
it's
basically
there's
no
explicit,
that's
right,
it's
all
implicit!
So
that
doesn't
work.
So
then
the
only
other
option
is
to
have
a
different
type,
which
now
goes
back
to
this
old
argument
of
like.
E
B
Said
take
people
to
be
honest,
though,
like
I,
you
should
look
in
this
I.
Don't
think
we
need
that.
Give
like
because
give
you
the
current
design,
accommodates
both
global
state
as
well
as
instant
state,
by
just
using
it
as
like
using
basic
you
Jason.
So
that's
all
for
the
option
here,
which
seems
you,
okay,.
D
It
does
not
have
methods
state,
so
that's
the
thing
that
I
kind
of
talked
about
like
if
you
do
a
read
on
a
complex
tree
and
you
have
some
overflow
properties,
for
example,
you
know,
like
properties
are
doing
exist
on
a
type,
but
the
exist,
my
JSON.
We
have
to
figure
out
where
to
put
those
and
there's
like
two
ways,
I
think
to
do
it.
D
One
is
you
stick
them
on
the
object
and
you
and
then
you
know
you
have
to
say
hey
this
field
is
used
to
store
the
overflow
properties,
for
example,
Jason
deck
supports
that
mode
or
you
return
them
with
a
method
and
I.
Don't
have
an
argument.
We'd
have
to
add
another
argument
to
the
end
or
the
third
option.
I
guess
is
to
have
an
instance
of
the
serializer
and
put
it
on
some
properties
to
say
hey.
These
are
your
overflow
properties,
for
you
know
all
types
or
something
like
that.
D
Well,
so
I
think
there
is
some
pieces
that
you
might
want
to
have
for
a
call
like.
Maybe
you
want
to
handle
it
some
air
handling,
and
you
don't
want
to
put
that
on
the
options
class,
because
you
only
want
it
for
this,
that
the
options
class
is
intended
to
be
immutable
and
shared,
because
it
has
all
the
caches
on
it.
Air.
D
D
B
D
E
D
Okay,
can
we
move
on
then
to
the
options
us.
E
B
G
B
Pretty
straightforward,
the
only
thing
you
can't
do
is
realistically.
Versioning
is,
if
you
have
multiple
different
kinds
of
overloads,
where
the
whole
like
pattern
is
different.
That's
when
things
you
do
like
itself,
but
if
you
just
have
like
an
ever-growing
list
of
options,
that's
pretty
straightforward.
D
Okay,
the
options
class.
We
kind
of
got
started
on
this
before
so
I'm,
just
kidding
I,
unless
you
want
to
read
this
I'm
just
gonna
skip
over
this.
It's
talking
about
the
same
stuff.
We
talked
about
before.
B
D
D
The
ball
code
at
a
time
we
last
time
that
we
talked
about
this-
were
these
three
properties
in
the
middle.
These
case
insensitive
and
skip
properties
before
they're
all
something
else,
and
they
had
default
values
that
we
didn't
like
so
now,
I
rename
these
three
and
they
all
have
default
billions
of
false
based
upon
what
we
thought
the
default
semantics
should
be,
and
then
the
other
stuff
is
the
same.
D
D
E
G
D
And
as
I
mentioned
last
time,
I
just
have
these
three
prophecies
here,
probably
be
several
more
anything,
that's
a
simple
inu,
marble
or
integer,
or
something
like
that.
We
would
probably
just
put
it
here.
Alma,
it's
done
necessarily
gonna
have
all
the
settings.
You
might
have
to
use
this
attribute
mechanism,
but
this
will
probably
grow
it
to
be
a
dozen
different
properties.
Here
we.
B
D
The
reason
why
I
didn't
have
the
property
name
on
these
skipped
no
billion
read
because
it's
just
exact
same
name
that
exists
on
the
property
attribute
right,
so
we
kind
of
redundant.
You
know
on
the
property
attribute,
maybe
to
put
the
property
name,
but
I
think
the
names
can
be
different.
So
it's
not
yeah.
D
Because
I
guess
it
has
a
default
value
of
minus
one.
Yeah.
D
E
B
E
Making
it
be
nullable
is
good
because
that
means
that
default
well,
I
guess
this
is
a
class,
so
the
default
is
null
but
and
so
nevermind.
If
it
was
a
structure
making
it
knowable
would
be
good
because
the
default
of
T
would
be
all
the
defaults
well
default.
0
is
the
class
good,
minus
1,
I
guess:
B
set
minus
1
again.
E
E
C
A
C
Kind
of
a
high
level
guideline
question:
we've:
had
many
of
these
option
classes
grab
to
the
review
and
we
go
back
and
forth
between
immutable
immutable.
And
what
do
you
do
when
somebody
who
thinks
they
were?
You
know
after
you
passed
it
and
so
on
and
so
on?
I
have
to
say
I
like
the
design
of
it's
mutable,
and
if
you
wrote
some
really
wacky
program
that
changes
the
options
while
the
stuff
is
surrounding
you
too
bad.
You
should
yourself
eat
the
food,
yeah
I
think.
E
E
Names
of,
if
you,
if
you
toggled,
that
in
the
middle
of
while
it's
running
I
kind
of
frankly,
don't
care
what
it
does,
but
the
notion
of
you,
you
add
an
attribute
to
change
how
the
serialization
model
would
be
that
one
needs
to
steal
it.
That
one
needs
to
close
it,
something
it's
modification,
because
it
it
has
data
security.
When
you
may
say
it
needs
to.
E
M
B
We
need
different
kinds
of
options
right,
so
the
there's
this
kind
of
option,
which
is
like
process
by
the
way.
This
is
just
part,
a
matter
of
options.
You
start
your
process,
you
forget
the
options
you
passed
and
you
just
have
a
convenient
way
to
pass
in
the
fact.
One
of
videos
right.
The
Paula
me
is
that
this
object
also
is
saying
yeah
and
then
you're
supposed
to
catch
that
yourself,
that
you
avoid
expensive
operations
and
I.
B
Think
in
this
case
the
question
is:
if
you
were
supposed
to
cash,
it
all
like
likely
to
shoot
yourself
in
the
foot
at
that
point,
I
think
feasibility
or
immutability
is
I,
think
something
we
should
think
about,
because
we
are
promoting
a
penny.
The
thing
about
that
you
will
hang
yourself
with
what
what
kind
of
state
does
this
actually
store?
One
time,
I
think
it's
just
a
casual
play.
Revlimid
data
yeah.
D
It
caches
meta
data
on
on
every
type
of
Faerie
lies
or
neither
light
yes
and
then
every
property,
cary,
IL,
yeah
IL,
would
be
stored
on
here.
If
we
start
differing
based
upon
these
options,
are
we
you
know
if
we
do
cogent,
for
example-
and
I
mentioned
that
above,
but
if
we
use
the
settings
on
here
to
generate
some
code
initially
and
in
theory,
this
class
would
probably
you'd
want
to
be
immutable
as
well
from
the
outset.
Just
to
your
code,
doesn't
you
know
raise
any.
H
D
I
think
that's
not
true.
We're
not,
of
course
gonna.
Do
that
and
right
now
the
code
only
only
kind
of
locks
down
you
call
that
attribute,
but
it's
a
discussion.
You
know
we're
having
on
what
we
want
to
do
for
how
you
know.
How
is
this
thing
expected
to
be
shared
if
we
want
to
assure
it
across
users
in
a
multi-threaded,
you
know
case
well,
then
it's
gonna
break
right.
H
She's
kind
of
that's
why
it
was
a
little
confused
right,
because
if
you,
if
you
knew
up
a
brand
new
Jason
serializer
options
and
then
call
right
again
passing
the
new
options,
it
sounds
like
you're
reusing
the
existing
code
code.
So
the
coach
Jones,
not
the
instructor
or
the
store,
is
not
a
static
static
static.
Until
you
call
her.
E
D
These
default
values
options
and
these
other
three
properties,
all
you
want
and
the
code
will
say:
hey
did
you
set
it
on
the
attribute
because
you
can
set
well,
not
not
the
reader/writer
options
that
did
you
set
these
other
three
properties
and
as
an
attribute
somewhere,
if
you
did
I'm
gonna
use
those
if
you
didn't
I'm,
gonna
fall
back
and
use
the
Billie's
here
and
and
write
analysis,
we're
not
doing
any
kind
of
code,
gen
or
ILO
mentoring.
That's
based
upon
these
three
properties
or
the
reader
writer
options
that
you
know
it
works
today.
C
Won't
work
in
multi-threading
cases
if
it's
a
bit
weird
two
stars
stating
of
caesium,
it
seems
like
we
like
in
Jason
that
there's
the
converter
there's
the
serializer
and
then
there
are
some
options
and
I
think
it
actually
is
there.
I
am
wearing
and
you're
kind
of
entity
model.
If
you,
if
you
will
it.
I
I
J
E
H
C
G
C
E
E
Everywhere
to
now
introduce
a
security
bug
we
want
we
want
what
gets
you
realized
to
be
very
deterministic,
but
otherwise
that,
if
you
change
in
the
middle-
and
you
say
no
like
skip
no
value
on
me,
changes
to
true
like
add
attribute,
but
how
this
whole
discussion
even
but
actually
was
being
a
source
of
like
modification
and
to
me
it
seems,
like
the
run,
a
fashion
where
the
attribute
is
kind
of
input
to
the
actual
underlying
policy.
You
don't
call
a
patch
of
you
and
you've
had
like
actual
pieces.
E
C
D
But
basically
the
thing
is
we
support
design-time
attributes,
you
know
almost
aerolizer
zoo
and
the
more
you
can
push
in
my
opinion
to
design-time
attributes
the
better
in
the
sense
of
you
know,
be
able
to
to
help
with
caching
to
make
sure
your
class
is
always
serialized
properly
and
youth
realize
who's
using
your
type
that
sort
of
thing.
So
then
the
question
is
well:
how
do
I
change
some
stuff
or
override
some
of
this
information
at
runtime?
D
Maybe
I,
don't
own
the
poco
types
or
they're
on
another
assembly
and
they're
shared
by
20,
different
sterilizers,
and
you
know
I
can't
touch
them
that
sort
of
thing.
So
then
you
need
a
runtime
light
to
do
the
exact
same
thing,
and
so,
instead
of
adding
another
API
up
to
the
side,
I
elected
here
just
to
say
you
know
what
just
add
the
attributes
at
one
time
and
as
he
to
work
as
my
mental
model.
How
doesn't
you
know-
and
it's
not
as
conventional
is
other
ways
but
without
duplicating
you
know
so.
C
So
I
was
looking
at
this
optional
feature:
API
ability
to
authorize
detailed,
behavior
and-
and
this
issue
with
the
attributes
and
the
issue
that
we
discussed
before,
like
which
type
doing
the
instantiate
and
whatnot,
don't
worry,
I
thought
and
I
actually
implemented
one
serializer.
It
was
another
JSON,
but
binary
theory
and
I
thought
about
this
thing
and
I
imagined
that
this
is
the
way
I
would
design
it.
H
C
But
I'm
saying,
like
you
know,
there
would
be
one
more
than
one
way
to
tweak
all
the
job,
basically
virtual
combats
that
are
being
called
by
default.
They
do
something
and
you
can
override
it,
because
now
it
seems
like
we
have
the
time
you
can
provide
JSON
class
materializer
or
we
have
attributes
that
you
can
apply
and
maybe
some
other
options
that
are
boolean
properties.
It
would
be
nice
if
there
was
a
very
flexible
mechanism
and
it
always
works
the
same
we
basically
describe
this
is
the
default
behavior
of
our
JSON
serializer.
B
E
H
J
D
A
property
so.
E
Like
so
the
call
this,
if
you
want
to
apply
a
natural
to
a
property,
you
would
do
type
of
blah
get
property
yes
and
they're
passed
new,
just
inappropriate
yeah
that
this
is
in
the
same
vein
as
EF
leg.
Modeling
wait
were
you
model
your
hose
yeah
up
its
objects,
but,
and
they
have
absolutely
API
for
saying
these
properties
these
like
attributes,
these
whole
things,
it's
kind
of
stat
the
same
space
right.
E
This
is
a
bit
of
it
because
they
have
kind
of
a
domain-specific
API
over
reflection.
So
you
don't
have
to
go
this
low,
you're
kind
of
saying
things
like
for
this
property.
I
want
this
to
be
a
Auto
ID
or
this
to
be.
You
know
something
else.
This
feels
very
low-level.
Maybe
it's
a
fine
building
block
but
I
have
this
aversion
to
add
a
runtime
attributes
versus
a
callback,
I
kind
of
Crillon.
The
things
we're
here,
you're,
given
control
or
really
so
the
callback
would
take
a
property
info
as
a
parameter.
D
This
can
be
cached
very
efficiently,
much
more
so
than
any
call
better
I.
Think
I
mean
we
can
catch
the
result
of
the
callback,
but
if
there's
custom
code
in
that
callback,
that's
varied.
You
know
that
change
is
based
upon
other
information.
You
would
also
have
to
say
that
callback,
whether
the
value
can
be
cached
well.
E
E
D
I
mean
basically
that
the
attributes
are
gonna,
be
aesthetic
properties
and
they're
not
expected
to
randomly.
You
know,
change
behavior,
absolutely
that's
the
same!
Well,.
E
D
Could
talk
about
that?
There's
a
there's
an
extensibility
model,
explicit
explicitly
for
camel
casing
or
casing
properties
that
you
would
add
a
new
attribute.
So.
C
I
don't
understand:
what's
the
you
made
the
performance
argument
that
something
can
become
stupid
with,
but
not
with
callbacks
with
convex,
you
don't
need
to
crash
anything
it
all.
Just
you
know
you
return
like
hey
I,
don't
like
the
property
name
who
I
want
you
to
symbolize
it
as
bar?
That's
it
what
the
pair
is
right,
I
mean
no.
D
D
Well,
I,
quit
I
mean
we
were
over
talking
for
a
little
bit.
Yeah
good
I
mean
you
put
a
virtual
method
on
here
that
you
can
overwrite,
which
I
don't
I'm,
not
necessarily
against
I
mean
it's
just
by
doing
that,
you
can
read
other
other
values
on
here,
for
example
IIE.
When
you
have
an
attribute
class,
you
don't
get
passed
in
the
options
class.
You
know
what
I
mean
you,
don't
you
don't
know?
D
What's
out,
there
is
very
simple
by
design
you're
gonna
read,
you
know
have
bulls
and
in
sand
whatever
it
have
with
that
your
function
will
be
in,
and
then
your
implementation
of
your
attribute
has
a
well-defined
method
that
we
call
to
do
something
like
you
know,
give
me
the
the
snake
case
value
of
your
property.
Then
we
can
cash
that
string
coming
back
on
instead
of
having
to
call
the
method
every
time,
for
example,.
C
Yeah
but
I'm
going
back
to
the
main
motivation
for
this
design.
Every
single
C
realizes
that
I'd
seen
my
career.
It
starts
simple
and
that
people
started.
You
know
demanding
more
and
more
knobs
and
then
all
should
attributes
work
for
this
one,
but
it
don't
work
for
this
other
thing,
oh,
you
are
in
the
care
that
performs
Arco.
Second
of
the
optional
features.
Api
is
basically
a
callback
like
type
because
attributes
don't
scale
to
class
materializes
and
like
over
time.
C
H
C
E
D
I
C
E
C
C
B
B
E
E
B
Could
imagine
like
something
that
you
know
Mitch's
reflection
context
like
you're,
just
passing
the
reflection
context?
Yes,
this
thing
should
use
right
now.
Reflection
context
in
itself
would
be
not
very
convenient
right.
So
if
you
look
at
how
math
v2
works,
you
basically
have
a
builder
where
you
can
say
that
you
know
blah
blah
blah.
You
know
from
types
in
assembly
and.
B
B
C
C
D
I
just
want
to
say
one
thing
about
if
we
do
that,
which
I
think
some
of
that
we
want
to
do
anyway,
yes,
but
a
lot
of
these
properties
can
be
applied
for
attribute
I
mean
sorry.
These
attribute
can
apply
for
property.
So
at
some
point,
then
you
know
we
need
to
call
a
method
for
every
single
property
to
say:
hey.
You
want
case
sensitive
or
case
insensitive
for
in
an
individual
property.
Assuming
we
want
us
dead,
etre
per
property
level,
not
a
type.
D
The
current
model
is,
you
know
it
can
fall
back
to
the
type
you
know,
because
it
has
a
declarative
information
on
it
and
can
cache
that
so
they'll
be
very
chatty,
at
least
until
you
warmed
up
it's
just
something.
To
think
about
can
do
property
even
window
type
level.
Then
you
control
that
yeah
I
almost.
E
On
the
property,
but
you
don't
call
custom
code,
you
generate
the
code
that,
but
if
you
have
a
camelcase
attribute,
you
can
just
generate
code
up
front
that
would
camelcase
those
properties,
because
you
knew
I
had
a
time
that
their
account
case.
You'd
have
to
do
things
like
steal
that
attribute
yeah.
B
But
I
mean
like
you
could
do
the
same
thing
of
Club.
X
right
I
mean
I.
Don't
think
we
need
to
provide
the
guarantee
that
says
that
the
cleric
runs
every
single
time.
You
see.
Oh,
that's
the
property.
You
can
just
say
it
once
your
policy
is
static.
So
if
you
did
you
base
it
on
the
date
of
the
week
or
something
like
screw,
you
I
just
I
just
generated
a
mid-face
curry
and
then
you
catch
the
same
level.
Right
I
recommend.
D
D
B
B
H
B
E
B
F
D
A
feature
here
that
I
don't
have,
which
is
the
ability
that
I
don't
have
yet
we
talked
about
before
it's
the
whole
I
want
to
serialize
everything
myself
yeah
I
want
to
provide.
If
then
logic,
we
need
that
I
don't
have
it.
That's
the
alt
and
fallback
to
all
this
attributes
up
in
whatever,
like
hey
here's
thousand
lines
of
code,
I
need
to
serialize.
My
class
basically
gonna
be
calling
reader
writer
manually
in
a
lot
of
cases,
but
you
you
can
still
do
whatever
you.
Alternately
want
good,
but
the.
H
H
J
D
D
Then
you
still
want
to
use
our
sterilizer
for
those
other
48
types,
and
then
you
write
your
own
serializer
that
hooks
them
through
to
this
at
runtime
to
serialize
your
other
two
types
manually,
or
maybe
you
consider
like
part
of
your
type.
If
you
only
have
one
property
and
will
handle
other
properties,
I
mean.
B
Let
me
just
say
screw
that
like
if
you
want
a
very
based
on
user,
for
example,
at
that
point,
you
need
to
control
the
sterilizer,
because
you
have
to
give
a
CD
in
your
own.
Caching,
you
can
just
say
for
the
current
user:
I
have
another
cache
reflection,
I
made
and
like
my
whatever
sale
as
its
instantiated
with
the
user
yeah.
So
it's
immutable
over
there,
but
I
never
have
to
look
at
the
actual
instances
to
determine
in.
E
D
Didn't
think
about
it
at
the
time,
but
it
could
be
this.
That's
something
to
talk
about
our
disease.
H
B
But
let's
go
second,
so
let's
say
we
pick
a
different
set
of
attributes
from
Jason
on
that
right
now
you
convert
your
co-pays
know
what
edit
every
single
file?
It's
not
going
to
be
pretty
so
I
think
the
only
thing
we
could
do
either
eat
they
decide
you
care
about
that.
Migration
has
to
be
smoother
and
maybe
just
say
even
that
this
layer
just
cares
about
reflection,
but
mister,
just
care
about
names.
We
couldn't
actually
just
honor
that
that
should
be
a
because
it's
the
same
name.
E
H
Would
be
something
that
I
think
this
would
make
herself
happy
too.
If
you
have
the
Jason
serializer
itself
have
a
bunch
of
virtual
methods.
You
can
have
a
compatibility
pack
which
sits
on
talk
about
and
says
I
understand,
all
of
the
old
attributes
as
well
yeah,
it's
a
set
that
we
should
figure
that
can
either
do.
D
E
H
B
C
F
C
D
Yeah,
it
doesn't
exist
that
it's,
the
old
Ito
write
your
own,
you
know
serialize
or
do
sir
lies
or
method
for
a
time.
You
know
you
basically
specify
converter
for
a
type
and
we
are
gonna
have
a
you
know.
Are
we
doing
the
right
method
that
we
call
and
we'd
give
you
everything
that
we
know
and
yeah.
C
E
Like
a
visitor
pattern,
where
there's
two
passes
there's
the
first
pass,
which
is
the
actually
policy
walk,
you
want
to
get
the
home
to
graph
and
you
return
the
turnout
review.
Somebody
fault.
The
default
invitation
does
like
recession
to
find
attributes.
B
people
are
right
and
add
more,
you
can
add
your
or
whatever
you
want
to
add
there.
So
there
was
once
per
type
and
its
cash
aggressively
and
then
the
second.
The
second
pass
is
for
the
actual
league
reading
and
reading
navigation.
H
E
C
B
I
mean
given
the
binormal
assembly
bless
it
or
you
could
basically
use
reflection.
Api
is
I,
have
it
working
full-time,
the
only
thing
yeah,
so
the
only
thing
is
why
I'm
asking
is
like
so
like.
If
you
look
about
policy,
we
have
to
make
sure
that
you
can
at
least
in
principle
image
code
that
does
not
require
runtime
like
runtime
state
right.
Otherwise
you
don't
have
this
indirection
literally
and
every
single
side.
I
think.
E
H
B
The
only
problem
of
that
kind
of
thing
is
that
if
you
do
caching
per
type
it's
fine
but
they're
built
I'm
like
like
we
said
like
all
at
runtime,
we
can
just
say
the
state
associated
with
the
option.
I'd
say:
oh,
it's
associated
with
the
serial
anymore,
like
you
can
do
this
a
good
time
like
I
mean
how
would
I
do
that?
You.
B
C
You
just
need
my
dick
has
come
to
have
custom
code,
but
does
the
serialization
deserialization
its
equivalent
to
me
manually
writing
you
know
a
loop
using
the
reader
writer
right
and
then
setting
properties
on
the
type
that
I
know
what
it
is,
but
what
what
I
need
to
catch
if
I'm
in
the
situation,
I
don't
actually
need
any
country
at
this
point,
my
coldest
as
efficient
as
it
gets
and
now
I'm
using
the
serial
either,
basically
as
a
way
to
handle
it's
the
state
machine.
That
knows
where
it
is
and
tells
me
hey.
There.
D
B
B
Work,
but
if
I
literally
have
to
make
in
order
to
make
crystal
scenario,
work
right
very
basically
well
nobody's
are
read-only,
because
everything
is
into
own
stage,
all
right,
so
I
can
just
say:
okay,
I,
you
know
give
me
a
give
me
a
call
back
that
says
this
civilized
object.
You
give
me
basically
the
data
yes
stealers
object.
You
give
me
the
object
and
right
under.
G
B
H
E
That's
a
key
because
you
have
to
come
back
out
into
their
credit
to
serialize.
Think
that
by
that
you
may
want
to
like
drop
it
right.
Don't
you
control
your
time
and
then
you
like
a
person
that
doubles
on
your
type,
typical
right,
T
and
then
walk
into
the
bigger
new
funds?
Do
you
like
the
little
thing
right.
B
H
D
E
D
Yeah,
that's
why
it's
optional
and
it's
also
dependent
upon
you
know
a
runtime
way
to
ask
see
if
replimat
is
available
or
not.
D
B
D
D
Lesbian,
if
deaf
and
maybe
that
that
whatever
you
give
to
fun,
you
can
change
it
manually.
If
you
want
well.
D
If
you
had
to
the
default,
I
tried
to
do
a
rep
lament
and
then
I
failed.
I
would
catch
that
you
know
specific
exception
and
then
flip
it
over
to
standard
reflection.
I
did
have
that
code
and
they're
really
as
part
of
type
and
I
just
took
it
off.
So
we
could
do
something
like
that.
If
you
really
want
to
so.
E
D
B
H
G
I
don't
hear
about
it
just
because
Jason
Bohn
it
has
always
serialize
and
deserialize
everything.
So
it's
it's
neither
has
never
been
an
issue
which
is
come
up
so
I.
C
B
C
B
Know
what
well
it
boy
attribute
says
and
of
course
the
custom
I
can
put
it
into
the
source
code
right
like
that.
That's
fine
I'm,
saying
that
if
you
need
to
customize
somebody
else's
type
of
attributes,
then,
rather
than
doing
that,
I
would
I
would
I
would
do
reflection
context.
But
but
if
we
say
we
don't
want
to
have
these
attributes
codes
either
we
only
want
to
call
back
mechanism
and
that's
fine.
What.
B
B
B
B
E
Where
you
can
target
properties
using
like
c-sharp
syntax
under
countries
not
kind
of
stuff
or
visitor,
that
walked
off
the
graph,
and
then
they
watched
the
type
draft
and
then
gives
you
a
call
back
per
thing.
Sanely
visit
type,
what
a
cute
on
the
on
a
site
visit
property.
What's
on
this
property,
I'm,
not
sure
what
you're.
H
H
Very
isn't
this:
how
have
you
seen
my
baby
I
could
work
under
the
cover,
so
yeah
yeah
and
don't
customers
actually
seem
to
like
it
yeah,
but
that's
not
anyway.
It
is,
but
it's
I
believe
I'm.
You
seen
what
they
P
I
work
around.
If
I
just
saying
we
we
do
all
of
the
hard
stuff
up
front
and
the
only
stuff
that
takes
place
for
requests
is
the
like,
relatively
lightweight
yeah,
stuff,
lightweight.
H
H
J
B
J
B
B
That
you
won't
do
it
programmatically
and
in.
Let
me
talk
about
now.
The
the
the
the
shape
of
these
api's
and
I'm,
saying
in
these
api's
I
would
avoid
system
would
attribute,
as
the
core
API
I
would
just
say.
You
have
a
policy
indicated
by
the
kind
of
callback
and
fine
I
knew
whatever
you
want
to
do
that,
but
you.
E
E
They
seem
I,
see
much
you've
got
a
callback
or
a
tight
run
for
a
property.
The
function
is
once
you
have
that
callback
and
you're
saying
I'm,
a
property
I'm,
a
property
name,
yeah,
it's
a
mad
person
type.
What
do
I
call
to
set
policy
do
I
call
some
buxom
the
up
your
model,
like
policy
dot,
said
camelcase
policy,
Don
blah
for.
E
H
Know,
and
one
and
one
of
those
methods
is
a
virtual
method,
which
is
give
me
the
name
that
you
want
me
to
serialize
out
to
the
wire
right
right,
actually
like
I'm.
Looking
at
this,
this
callback
thing
and
Steve
I
think
you
actually
have
something
very
similar
to
those
where
I
chase
an
enum
converter
attribute
like
it's
an
attribute
that
returns
a
delegate
effectively.
J
D
I've,
looked
at
certain
plugin
points
like
have
a
raves
and
things
like
that
and
I
added
a
special.
You
know
based
attribute
that
you
could
derive
from
and
have
complete
control
things
like
camel
casing.
I
don't
want
to
necessarily
have
to
implement
snake
casing
and
other
variants
and
and
enums.
D
E
E
B
C
G
C
Thing
is
that
you
know,
let's
say
we
release
some
answers
because
version
one
and
after
returns
these
fields
in
the
JSON
table,
and
then
they
start
returning
more
or
somebody
grabs
and
SB
came
from.
You
know
new
we're
SDK
and
calls
a
previous
version
of
other
API
yeah,
and
now
it
returns
less.
The
serializer
needs
to
be
resilient
to
it
and
in
some
cases,
needs
to
be
able
to
run
so
the
way
it's
done
in
that
experiment.
D
E
B
H
D
As
a
disclaimer
I
mentioned
at
the
top
here
that
there's
other
features
that
will
affect
the
api
and
they
might
even
affect
current
API.
So
yeah,
I
don't
know
what
I
don't
know
so
you
know
I
could
definitely
spend
some
time
on
a
custom,
sir,
no
hazard,
utiliser
and
then,
along
with
that
some
callbacks
and
get
that
kind
of
fleshed
out,
because
I
think
that
is
probably
gonna
be
required
for
MVP
at
least
a
custom
t
serializer,
but
I
think
we
can
keep
making
progress
on.
You
know
the
sake.
D
Keep
you
know
meeting
until
we
get
its
hashed
out
an.
B
B
D
Ending
features
on
the
bottom,
those
are
the
ones
I
assume
we
need
for
MVP.
B
B
D
Okay,
the
reason
why
the
design
is
like
it
is
is
there's
more
than
one
way
to
do.
Casein
you
know
they're,
stinky,
sin
and
I,
don't
know
three
or
four
different
ways
to
do
it
and
I
made
it
a
separate
attribute.
So
it's
extendable,
and
so
if
you
have
a
bull
here
and
if
you
want
to
support
a
snake
case
and
well,
then
it
should
be
an
enum
and
I
don't
and
what?
If
someone
wants
to
write
their
own
hold
on
if
I
want
camel
casing
today,
what
do
I
do
you?
J
D
The
the
Jason
property
attribute
in
theory
would
hold
all
of
the
common
ones.
You
know
that
are
simple
bulls
and
ants
and
stuff
that
aren't
necessarily
extendable
I
mean.
Are
you
really
gonna?
You
know
extend
skip
value
on,
read,
I
guess
you
know
that
sort
of
thing,
but
as
soon
as
there's
an
attribute
like
casein
that
you
you
know,
you
can
write
n
number
of
different
case
and
strategies.
Then
it
becomes
his
own
attribute.
G
It
can
be
extended
by
pacing,
isn't
necessarily
global.
So,
for
example,
sometimes
people
want
to
camelcase
their
property
names
on
classes,
but
they
don't
want
to
camelcase
the
key
names
and
dictionaries.
So
windows
are
serialized
so
Jason
they
both
look
the
same,
but
they
can
have
different
meanings
like
you.
Don't
want
to
start
messing
around
with
keys
on
a
dictionary
like,
for
example,
it
might
be
employee
permission
stored
in
a
dictionary,
and
if
you
came
okay
so
then
it
changes
the
underlying
value
and.
D
And
things
like
snake
you've
seen
you
know,
which
is
adding
underscores
in
between
words,
can
get
very
complicated.
You
know
you
have
to
look
at
with
sticks
and
things
like
that
and
it's
something
I
didn't
want
to
implement
here
and
I
was.
G
Speaking
speaking
of
camel,
casing,
I'd
highly
recommend
you
just
copy
and
paste
jason
donates
logic
for
doing
it.
I
gets
more
as
more
complicated
than
you
would
think
to
camel
case
something
how
you
would
expect.
I
came
okay
since
something
to
what
a
user
would
expect,
like.
There's
lots
of
little
corner
cases,
and
it's
the
thing
that
once
you
once
you
shepard.
G
Yeah
but
like
what?
What
happens
if
there's
an
underscore
like,
do
you
came
okay,
the
first
character
after
an
underscore
or
what
happens
if
you
have
xml
reader
and
xml
as
all
in
capitals
like
you,
just
came
okay,
so
first
x
and
not
the
rest
like
there
are.
There
are
little
weird
situations
which
people
don't
think
of
on
the
surface.