►
From YouTube: .NET Design Review: GitHub Quick Reviews
Description
00:00:00 - Approved: Consider exposing Socket(SafeSocketHandle fd) constructor https://github.com/dotnet/runtime/issues/862#issuecomment-610520669
00:26:35 - Approved: MemoryMappedFile constructor https://github.com/dotnet/runtime/issues/33206#issuecomment-610526663
00:38:26 - Approved: Implement IAsyncDisposable for XmlWriter and XmlReader https://github.com/dotnet/runtime/issues/33618#issuecomment-610535975
00:57:13 - Needs Work: Provide opt-in for custom converters to handle null https://github.com/dotnet/runtime/issues/34439#issuecomment-610556104
01:39:35 - Approved: JsonSerializer support for non-public accessors and fields https://github.com/dotnet/runtime/issues/34558#issuecomment-610571471
A
He
every
day,
for
the
past
few
weeks,
he's
been
joining
me
for
meetings.
I,
don't
really
know
why,
but
I'm
not
gonna
complain.
Well.
Cats
are
social
beings.
They
also
want
to
be
in
the
meeting
very.
A
C
C
E
If
you
get
a
handle
from
somewhere
else,
such
as,
if
you
P
invoke
to
something
like
socket
pair
or
you,
P
invoke
to
socket
and
on
Linux
thing
you
know
pass
in,
create
your
own
socket
for
some
Linux
specific
protocol.
You
have
no
way
to
then
use
the
rest
of
the
socket
class
and
infrastructure
with
that.
So
this
is
just
adding
a
constructor
to
socket
that
takes
an
existing
handle.
E
There
are,
for
the
most
part,
everything
works,
as
you
would
expect
it
to
there
are
you
know
the
some
expected
oddities
and
some
unexpected
oddities,
obviously
an
expected
oddity,
which
happens
anywhere
else.
We
deal
with
handles
if
someone
were
to
pass
in.
You
know
a
bad
one,
for
example,
one
that
was
already
closed.
Someone
was
you
know,
working
with
the
raw
handle
or
file
descriptor
closed.
E
Api
is
on
the
socket
class,
where,
if
you
take,
for
example,
there's
a
property
socket
blocking
which
on
socket
defaults
to
true
on
Windows,
there's
no
way
to
query
whether
a
socket
has
been
put
into
non
blocking
mode,
at
least
not
as
far
as
I'm
aware,
whereas
there
is
on
linux,
and
so,
if
someone
passed
in
a
handle
that
they
had
made
non
blocking,
we're
still
gonna
reflect
it
as
suck
at
socket
up
blocking
equals.
True
on
windows,
because
we
just
have
no
way
to
get
the
actual
value.
E
You
can
work
around
that
if
you
know
you're
in
that
situation
by
toggling,
it
yourself
and
then
it'll
kind
of
you
know
snap
back
into
the
right
thing,
but
there'll
be
a
few
things
like
that,
where
we
just,
we
lack
the
ability
to
grab
the
exact
data
too.
If
you
have
you
created,
you
know
in
a
certain
way
to
fully
round-trip
the
information,
but
all
the
API
is
like
right,
send
and
receive
all
just
work.
C
E
Could
there's
a
variety
of
properties
like
that,
where
we
can't
necessarily
infer
it
on
all
platforms
like
on
Mac
on
Windows
and
Linux,
we
can
infer
the
protocol
type,
but
we
can't
always
or
generally
we
can't
on
Mac.
So
would
we
also
take
the
protocol
type
it
and
what
happens
if
we
you
know
on
on
Linux,
we
can
infer
it.
What
happens
if
you
pass
in
a
different
one
from
the
one
that
we
inferred,
do
we
throw,
but
we
wouldn't
do
that
on
Windows,
because
we
couldn't
infer
it.
E
C
I
mean
the
one
thing
that
it's
like
giving
they
be
no
investing,
as
my
question
would
be.
How
could
we
help
people
right?
So
if
we
down
in
a
dedicated
API,
it
would
be
fill
it'll
be
hard
for
us
to
detect.
Oh
you
on
Windows,
but
you
you'll
see
you
pass
in
a
socket
handle
but
you're
not
setting
blocking.
C
F
Socket
right
the
or
have
constructors
that,
if
you
want
to
for
given
family,
you
can't
read
sockets.
So
this
is
only
for
a
special
cases
where,
for
example,
you
pass
descriptors
between
processes
or
you
try
to
work
with
unsupported
address
family
that
all
that
stuff
is
kind
of
advanced.
And
if
you
want
to
just
use
normal
constructor,
you
can
right.
F
F
C
E
We
see
way
if
you,
if
you
access,
socket,
get
blocking,
we
don't
know
what
to
return
so
like
by
default.
If
you
would
do
that,
we
don't
actually
query
the
underlying
file
descriptor
a
handle.
We
just
know
that
I'm
sorry
I'm
a
backup
if
you
create
a
socket
just
using
the
socket
win32
function
or
the
POSIX
API,
it
defaults
to
being
a
blocking
mode.
E
We
know
that
in
the
socket
implementation-
and
so
we
maintain
our
own
shadow
copy
of
that
information
of
fields
that
says
whether
it's
blocking
mode
or
not,
which
defaults
the
truth.
So
if
you
just
call
get
blocking,
is
going
to
return
true,
if
you
have
set
it
to
false,
then
we'll
not
only
make
the
assist,
call
to
move
it
into
a
non
blocking
mode,
but
we'll
set
our
property.
You
know
our
field
to
false
and
then
next
time
you
access
it.
E
You'll
get
the
value
of
the
field,
which
is
false
if
you
construct
it
from
an
arbitrary
file
descriptor
or
handle,
and
we
lack
the
ability
to
ask
the
operating
system.
Is
this
blocking
or
non
blocking?
We
kind
of
have
no
other
option
but
to
assume
it's
the
default,
and
so
we
leave
our
field
set
to
true.
If
it's,
if
we
do
have
the
ability,
then
we
can
query
the
operating
system
and
set
the
field
appropriately.
E
We
actually
send
we.
The
way
we
implement
asynchrony
for
sockets
is
by
putting
the
underlying
file
descriptor
into
a
non-blocking
mode
and
then
layering
on
sort
of
the
asynchrony
ourselves
via
trying
the
operation
getting
an
e
woodblock
and
using
a
pole
to
wait
for
the
operation
in
the
scalable
way.
That
means
that
the
we
actually
on
purpose
diverge
the
state
that
we
maintain
and
socket
for
socket
dot
blocking
from
the
underlying
file
descriptor.
E
So
if,
even
if
you
were
to
take
one
socket
put
it
into
non-blocking,
you
know
say:
create
a
socket
on
linux
and
just
make
an
asynchronous
method.
Call
on
that
socket
socket
up
locking
for
that
socket
will
return
true,
but
the
underlying
fire
of
the
file
descriptor
will
be
non-blocking.
If
you
were
to
then
take
that
safe,
socket
handle
and
use
it
to
create
another
socket
instance.
E
F
C
I
mean
because
advanced
or
not,
people
really
read,
documentation
and
stuff
doesn't
work
right.
The
problem
is
that
stuff
only
doesn't
work
on
certain
operating
systems
right,
which
is
the
whole
point
that
we
tried
to
design
API
is
that
they
work
across
as
much
as
we
can
by
default.
Right
I
mean
this,
of
course,
always
got
Russ
and
you're
always
expected
to
test
stuff,
but
in
practice
people
don't
test
an
operating
systems
all
the
time
right,
so
that
so
so
my
question
was
basically
like.
C
If
we
have
cases
like
this,
how
can
we
at
least
provide
an
analyzer
that
would
tell
you
that
this
stuff
is
no
longer
portable,
because
you
didn't
do
something
correctly
right,
I
mean
we
could
I
mean
if
you
make
a
constructive
of,
let's
say,
inaudible
parameters
at
least
we
can
detect
it.
Oh
yeah,
you
said
no,
which
means
you
know
we
inferred.
If
we
can
see
if
we
can,
if
he
can't
then
too
bad,
then
we
can
tell
people
like.
So.
Are
you
past
it
now
here?
Probably
that
code
is
long,
affordable
to
Windows?
C
E
C
E
C
Not
that
is
optional
right
in
conjunction
with
an
analyzer
right,
so,
like
the
implies,
it
would
tell
you
that
or
you
call
this
API,
you
pause
and
also
this.
That
code
is
no
longer
portable.
If
you
want
the
code
to
be
portable
pausing,
the
correct
leader
for
this
parameter,
I
did
so.
This
will
be
the
message
we
give
people,
but.
E
E
C
D
B
So
from
like,
if
it's
just
a
reporting
problem,
which
is
what
it
sounds
like
it
is
for
Windows,
then
I
can
kind
of
decide
that
I
don't
care
and
that
we
could
fix
it
in
the
future.
But
if
this
is,
if
you
have
a
socket
on
Linux
and
you
grab
the
handle
and
then
you
open
a
new
one
from
that
handle
and
it
changes
behavior,
then
we
shouldn't
add
the
API
either
it
becomes
a
mandatory
parameter
of
you
have
to
say:
if
you
want
it
in
blocking
mode
or
not,
or
we
just
don't
add
it.
B
I,
don't
think
I
agree
because
diagnostically
lying
is
one
thing,
because
I
don't
think
people
are
really
gonna,
read
the
property
back
and
care,
but
if
you've,
if
you
get,
if
non-blocking
is
maintained
on
Windows
and
Mac
or
is
maintained
on
Windows,
then
they're
gonna
expect
that
it's
maintained.
Like
you
tested
a
sink,
it
looks
a
sink
everything's
happy
then
different
things
happen
when
you
go
to
linux.
Like
that,
to
me
is
worse,
I
don't
think
I
don't
think
would
change
behavior.
E
Would
it
Steve
the
the
socket
won't
change?
Well,
it
could
change
behavior.
So
if
I,
if
I
kept
the
socket
1
on
Linux
and
I,
make
an
asynchronous
actually
okay.
So
here
I'm
gonna
first
answer
the
question
and
then
make
a
suggestion:
if
I
have
socket
one
that
I
make
an
asynchronous
operation,
call
on
its
socket
blocking
is
gonna
be
true.
The
underlying
file
descriptor
will
be
non-blocking.
E
If
I
make
a
sync.
If
I
then
make
a
synchronous
call
on
that
socket,
we
will
respect
the
socket
deblocking
equals
true
and
will
simulate
the
synchrony.
Even
though
the
file
descriptor
is
non-blocking,
so
we'll
still
make
the
operation
complete
synchronously
and
successfully,
even
though
the
underlap
now
non-blocking.
If
you
then
just
make
a
read,
call
on
it,
it's
going
to
fail
with
IE
would
block,
because
its
socket
blocking
property
is
going
to
be
false
rather
than
true.
If
assuming
we
query,
the
underlying
file
descriptor.
E
So
one
solution
to
that
is
to
just
say:
we
always
create
the
socket
with
a
blocking
equals.
True
in
our
sort
of
managed
view
of
the
world,
we
still
query
to
understand
whether
the
underlying
socket
is
non-blocking
or
not,
and
regardless
of
OS.
When
you,
then
you
know,
construct
this
thing
from
their
socket.
You're
gonna
get
socket
top
locking
equals
true,
and
if
the
underlying
socket
was
a
sync
on
Linux,
then
it'll
will
simulate
the
blocking
there.
E
But
not
I
mean
they're
there.
There
are
still
some
inconsistencies
that
we
can't
do
anything
about
like
if
you
on
Windows,
if
you
socket
want
made
it
socket
dot
blocking
equals
false
and
then
use
that
safe,
socket
hail
to
create
a
second
socket.
We
have
no
way
of
knowing
what
the
underlying
socket
is,
so
we're
shooting
in
the
dark
as
to
whether
it's
blocking
or
not
so
you
could
set
it
to
blocking.
E
I
have
a
suppo
to
say
yeah,
you
can
always
say
to
Blokland
in
word:
we're
actually
mutating
the
underlying
handle
yeah,
so
I
don't
think
we
want
to
do
that
either,
but
I
understand
the
concerns
Jeremy.
At
the
same
time,
I
think
the
benefits
of
such
an
API
outweigh
the
concerns.
So
saying
we're
just
not
gonna.
Add
it
because
there
are
some
oddities
I,
don't
think
it's
the
right
answer.
I.
B
Think
I
just
felt
like
I,
just
my
maybe
it's
like
crypto
stuff.
If
you
only
actually
have
like
seven
customers
and
they
don't
all,
read
the
docs
and
understand
it,
and
it's
fine
I,
just
I
feel
that
I
can't
load
the
state
machine
here
in
my
head
and
therefore
I.
Don't
think
that
the
average
caller
could
either
well
the
average
caller.
E
Isn't
gonna
access
the
relevant
properties,
but
even
if
they
couldn't
the
only
other
answer,
is
you
need
to
write
platform-specific
code
for
every
platform
you
want
to
target
in
order
to
P
invoke
and
re-implement
the
entire
system?
Net
sockets
infrastructure
to
be
able
to
use
arbitrary,
socket
file?
Descriptors
you
get
and.
B
E
I
mean
there's
also
deducted
in
same
instance,
right
there's,
almost
no
reason
to
take
the
safe
socket
handle
from
one
socket
and
use
it
to
create
another.
The
the
primary
scenario
here
is
you
do
something
the
P
invoke
or
native
code
that
gives
you
a
handle
or
file
descriptor,
and
you
use
it
to
construct
the
socket
right.
B
And
in
that
case,
I
guess
it
makes
more
sense.
I
just
started
with
your
premise
of
we
exposed
this,
and
then
there
was
nothing
you
could
do
with
it,
and
so
now
I
was
just
picturing.
You
have
a
socket
and
you're
cloning,
the
socket
by
hand
right,
but
that's
actually
bad,
because
modifying
one
will
modify
the
other
in
ways
that
we
still
can't
express
right.
E
Like
one
thing
you
might
do
with
it
is,
you
know,
send
it
across
a
UNIX
domain
socket
or
something
to
some
other
process
or
use
this
on
Windows
with
duplicate
or
whatever
that
API
is,
but
the
primary
use
cases
for
this
are
I'm
P,
invoking
or
in
some
native
code
I'm
creating
I'm
calling
some
API.
That
gives
me
back
a
socket
file,
descriptor
or
handle,
and
now
I
want
to
use
the
manage
socket
class
to
wrap
it.
Okay,.
E
Okay,
for
example,
as
part
of
another
bug,
fix
that
caused
me
to
look
at
this
I'm
90%
sure
we're
going
to
change
this
process
start
to
use
socket
pair
instead
of
pipe
to
create
the
connection
to
the
new
process
that
you
start
and
it'd
be
really
nice.
If
we
could
then
create
a
socket
for
the
client
to
communicate
over
rather
than
not.
B
E
B
E
E
C
E
So,
generally,
a
developer
will
put
the
socket
into
a
specific
mode,
and
then
all
subsequent
operations
perform
a
certain
way
in
response
to
that.
So,
if
I
call
Reid
and
the
socket
is
in
blocking
mode,
Reid
will
block
until
it
can
perform
the
read
successfully
if
I
call
Reid
and
it's
a
non-blocking
mode
Reid,
and
we
can't
successfully
return
immediately.
I'll
return,
an
error
would
block
the
socket
class
will
continue
to
correctly
behave
exactly
in
that
way.
G
C
C
H
H
H
E
B
E
B
E
H
H
E
Was
asking
so
Mike?
It's
I
mean
I
interrupted
Carlo
rudely
before
he
got
to
actually
talk
about
the
API,
so
I
apologize
for
that,
but
yeah.
If
this
was
just
a
public
constructor
that
took
memory
map
file
handle
like
I'd,
have
no
concerns
about
that,
but
taking
this
other
AI
disposable
thing,
that
is
this
other
additional
thing
to
dispose
of
when
the
memory
map
file
is
disposed
as
an
implementation
detail.
E
So
it's
weird
to
me
that
we're
adding
a
constructor
for
that,
if
it's
the
only
way,
okay
but
I'm,
hoping
we
find
another
way
and
the
other
way
I'm
suggesting
is
rather
than
have
that.
The
reason
this
needs
to
exist
is
because
the
implementation
that
needs
to
use
this,
as
in
another
assembly,
I'm
suggesting
move
that
implementation
down
to
the
same
assembly
and
just
expose
it
from
the
original
one
did
the
higher-level
one
with
type
codes,
I.
C
E
C
You
know
I
mean
I,
agree
with
everything
you
said
like
to
me.
The
handle
one
would
be
very
unpopular
mattock.
That's
like
a
very
pattern.
We
happen
to
be
seeing
almost
everywhere,
but
you
can
construct
a
managed
object
over
the
underlying
native
one.
The
filestream
one
seems
more
in
the
realm
of
plumbing
right,
where
it
really
doesn't
make
sense
anybody
to
call
this
it's
just
there,
because
infrastructure
needs
to
call
it
well.
D
C
D
B
B
But
I
don't
know
how
where
we
would
be
able
to
like
yeah.
So
it
would
be
interesting
to
see
if
there's
a
place
that
we
can
already
hide
it
because,
like
how?
How
is
the
Akal
assembly
going
to
be
able
to
set
it
because,
presumably
word
unless
we
have
a
constructor
that
expands
it
from
file
stream
them,
which
case
that
would
be
easy.
We
just
saved
the
reference.
E
And
then
I
think
you
know
if
those
two
all
don't
work
out,
I
think
my
third
would
be
I.
Don't
is
safe
memory
mapped
file,
handle
sealed
if
no,
presumably,
the
accolade
P
is,
could
just
derive
their
own
internal
version
of
it
and
include
the
file
stream
on
the
handle,
if
not
I'd,
almost
rather
unseal
safe
memory
map
file
handle
so
that
that
could
be
done
rather
than
add.
This
API
Steve
wants
something
to
be
unsealed,
no
I
don't
want
it
to
be,
but
I'd
rather.
A
B
H
D
B
E
C
Sorry,
like
I,
think
I
think
I
got
lost
by
what
I
was
typing,
the
node
so
option,
one
that
I
had
written
right
now
is
moved.
Implementation
from
the
higher-level
assembly
to
the
assembly,
contain
memory,
mapped
file,
vomiting
and
the
breakfast
assembly
split
that
we
currently
have.
Then
that
was
the
option
with
the
smuggling.
The
data
is
in
the
safe
memory,
mapped
file,
handle
I,
guess
that
is
the
option
of
having
a
field
and
then
there's
the
other
option
of
deriving
format
is
that
is
that
is
that
fair
yep
yeah?
E
E
E
I
D
B
D
D
D
E
D
E
D
J
D
A
B
B
A
So
a
related
question
Steve
like
what
happens
if
say
that
the
implementation
of
writer
dot
closed
async
is
it
calls
underlying
stream,
dot,
flesch
a
sink
and
then
underlying
stream
disposed?
If
flush
async
throws
an
exception?
Is
the
dispose?
Oh,
you
think
method
also
supposed
to
throw
an
exception.
D
A
E
B
E
E
B
E
B
B
I
mean
like
emo
and
I,
drew
this
out
on
on
a
board
trying
to
figure
out
if
for
the
degenerate
case,
where
you're
disposed
async
and
have
a
finalizar,
which
yes
should
not
happen,
but
it's
disposed
disposed.
Async
should
be
non-virtual
should
call
your
dispose.
A
sink
core
then
should
call
dispose
false
and
then
should
call
sorry
should
dispose
a
sink
or
suppress
finalized
dispose
false
to
make
sure
that
you
got
anything
that
needed
to
run
in
the
in
the
full
absolute
shutdown
case.
C
C
And
I
think
I
think
what
we
landed
was.
The
details
might
be
worthwhile
just
thinking
about
this
at
some
point
and
next
seen
the
flow
chart
again
but
I
mean
my
other
question
is
more
basic,
actually
so
the
XML
reader
writer
we
have
these
create
methods,
these
factory
methods
that
we
told
everybody
to
use,
and
so
you
can
construct
a
reader
and
a
writer
over
a
text
reader
in
the
text.
B
C
C
E
B
B
Because
the
the
belief
was,
if
dispose
async
is
equivalent
to
dispose,
then
it
should
remove
it
from
the
final
wiser
queue
if
it
was
registered
for
finalization.
So
we
have
to
put
that
call
somewhere.
So
we
said
continuing
the
the
pattern
that
we
already
have
of
the
dispose
itself
is
not
virtual
means
that
there's
a
definite
place
to
put
it.
I
E
B
C
D
C
E
In
any
kind
of
structured
exception,
handling
solution,
whether
using
using
or
try
finally,
you're
gonna
be
closing
this
thing
on
the
way
out
and
closing
this
is
gonna,
be
cleaning
up
resources.
You
want
to
clean
up
resources,
even
if
you
were
cancelled,
you
generally
have
one
cancellation
token,
which
is
what
triggered
cancellation.
If
you
also
pass
that
into
the
thing
that
supposed
to
clean
up
your
resources
and
it
prevents
you
from
cleaning
up
your
resources,
it's
not
good.
That's.
E
E
E
C
L
Lay
on
your
own,
yes,
okay!
So
this
issues
about
allowing
custom
converters
down
to
know
today
serialize
that
so
this
budget,
since
here
is
it
so
series
are
only
passes
not
to
custom
converters
if
there
are
value
types,
structs,
okay,
some
good
start
of
one
week.
So
when
we
do
not,
so
we
don't
pass
not
to
custom
converters
for
reference
types,
so
instead
we
return
all
on
this
realization
or
four
different
types
and
a
serialization.
We
write
know
directly
so.
K
L
L
Yeah,
so
so
we
don't
pass
not
to
reference
types,
but
for
value
types
we
do
personal
and
it
is
to
support
internal
logic
for
DC,
arises
in
Jason
element,
inaudible
of
T,
where
no
is
valid
token.
So
what
is
meant?
We
return
a
jason
element
with
a
value
kind,
no,
and
for
not
above
t
and
obviously
just
coming
off.
So
we
supported
so.
L
L
Those
coming
off,
but
it's
basically
to
see
converter,
determine
what
to
do
with
this
invalid,
not
open,
so
this,
which
are
provides
a
way
for
converters
to
obtain
to
handle
in
all,
regardless
of
whether
they
convert
value
of
reference
types.
So
this
will
have
to
be
obtained
because
previous
behavior,
that
I
just
described
series
might
want
to
Hunton,
offer
various
scenarios
or
situations
for
validation
or
replacing,
in
all
token,
with
something
else,
some
default
value,
so
that,
if
you
know
Stack
Overflow
people
brought
this
up.
L
L
Imagine,
like
he
user
profile,
account
for
some
app
every
first
name
last
name
and
we
link
to
their
profile
page.
So
Jason
comes
back
and
then,
for
some
reason
it
doesn't
have.
You
know
I
mean
doesn't
so
you
want
to
replace
that
no
token,
with
some
value
on
this
realization
the
read
method
there
and
on
for
writing.
L
So
we
already
have
existing
logic
to
pass
a
law
to
comfort
us
for
decision
because,
as
I
mentioned
above
listener
elementary
districts,
and
we
need
to
disguise
that
and
pass
it.
No
well.
Let's
eat
know
that
knowledge
trying
to
beat
this
realized
and
also
for
another
good
types
as
well.
So
this
infrastructure
exists
internally
right.
B
L
B
L
When
this
also
applies
for
serialization
as
well,
because
this
0
type
can
be
no,
so
you
want
to
do
something
else
once
you
realizing
so
okay,
so
that's
already
gone
over
it
like
API
usage,
so
I'm
not
sure
if
every
so
everybody
saw
the
EPA
proposal,
because
that's
what
country?
So
you,
if
you
can't
just
scroll
up.
L
Decent
Court
of
T
existed
here
right
now,
so
we're
putting
proposing
a
virtual
brilliant
get
only
because
you
just
have
to
return
true
or
false,
where
they
want
200.
No,
so
default
value
for
value
types
will
be
true,
because
that's
the
behavior
to
be
country
inter
cuz,
they'll,
be
breaking
and
because
I
think
it
makes
sense.
But
for
reference
types
value
before.
L
So,
of
course,
any
converter
can
see
trough
also
the
behavior.
So
if
you're
is
value,
type
opt
out
of
handling.
No,
then
we
will
likely
return
a
default
value.
When
we
see
no
and
you
decided
not
to
handle
it,
then
of
course,
if
you
reference
type
any
opt-in,
then
you
and
whatever
you
want
to
get,
and
you
think
that's
about
yeah.
Sorry.
E
K
L
This
is
a
relative
feature.
It's
where
we
see
like
either
no
came
in
then
I
want
to
replace
no
with
this
value,
or
there
was
no
decent
and
I
want
to
put
this
file
instead.
So
that's
related
to
like
default
value,
handian,
that's
something
else
which
people
have
asked
for,
but
and
it
could
solve
this
scenario,
but
specifically
people
want
to
be
able
to
handle
all
in
their
comforter
so
well.
That
is
something
which
could
support
them.
Maybe
should
I,
don't
think
it
directly
solves
this
problem.
I
mean
it's
also
dependent
on
you
know.
L
E
E
L
L
N
To
understand
what
options
the
option
with
like
getting
a
tea
for
the
valued
like
you
have
to
have
a
not
everything
to
write
like.
Why
are
you
given
a
now?
You
have
to
construct
the
tea
out
of
it,
so
it
is
a
very
common
pattern
by
real
users
want
to
see
string
not
empty
instead
of
a
null
value,
so
you
like
it
just
adds
more
api's,
as
opposed
to
like
this
one,
where
you
get
one
API
for
both
civilization.
Ninety
serialization
right.
B
L
Told
us
to
ignore
so,
if
ignored
no
value
will
not
fire
here,
because
we
see
that
the
value
changes
here
is
no
and
then
this
doesn't
from
that
and
I.
Don't
think
it
should
I
mean.
B
L
A
You
round
tripping
so
say
that
you
have
a
client
server
and
your
round
tripping
some
kind
of
structure,
and
if
the
structure
has
an
empty
string
property,
because
that's
what
you
expected
in
the
first
place,
when
would
you
ever
get
an
OLE
on
the
wire
in
that
scenario,
like
your
server
will
never
send
mult
of
the
client
in
that
scenario,
that
I
just
described
so
this
property
theoretically
will
never
even
get
called
in
such
a
scenario.
I.
L
Mean
in
that
scenario
perhaps,
but
the
veers
I
mean
going
through
all
the
scenarios
that
could
possibly
happen,
that
Jason
could
come
out
of
no
way
might
not.
That
should
be
in
your
own
ship
scenario.
Do
we
we
typically
think
about
when
we
design
these
features?
Somebody
might
just
happen
to
have
no,
and
then
they
want
to
be
able
to
determine
what
to
do
it
when
they
see
it
in
their
pillow
right.
A
And
I
I
get
that
I
I
recognize
that
there's
a
scenario
where
you're
reading
from
some
third
party,
the
third
party
has
put
it
all
on
the
wire
you're
consuming
it.
But
in
that
case
we
would
say
that
the
Jason
converters
handle
no
property
is
telling
you.
How
do
you
want
me
to
deserialize
know
what
I'm
having
trouble
wrapping
my
mind
around
is,
if
we
say
this
property
is
also
controlling
serialization
at
that
point.
Generally,
is
the
scenario
not
round-tripping,
because
if
your
serializing
presumably
are
also
deserializing.
L
A
A
L
L
L
M
J
Ultimately,
that's
that's
all
this
thing
does
is
called
existing,
read
and
write
methods,
not
on
you
know,
serialization
deserialization,
so
you
can
do
whatever
you
want
in
that
you
can
not
do
anything
or
you
can.
You
know,
add
some
logic.
So
I,
don't
I,
don't
think
we
need
two
rules
here,
because
you
still
have
control
over
them.
J
L
So
the
reason
I
put
it
so
yeah,
okay,
so
that's
a
good
point
that
some
other
method
that
determines
whether
the
converter
is
it's
called,
is
on
the
piece
type.
But
for
me
like
read
and
write
out
on
this
type
and
the
only
time
you
would
want
to
ask
whether
you
want
to
handle
all
is
when
you're
about
to
read
or
write.
So
I
thought
to
put
it
here:
okay,
yeah!
A
C
C
L
C
That's
the
thing
that
we
should
Poli
validate
I
mean
like
to
me.
It
seems
I
grieve.
You
think
it
probably
is
two
different
features
and
you
may
bond
one,
but
not
the
other,
but
we
should
make
sure
that
the
design
is
not
you
know
this
is
the
design
will
work
for
both
of
them
and
it
looks
like
they
were
both
designed
it
not
like
accidentally,
stitched
together
right,
so
I
stitch
together.
You
know
what
I
mean
like
solar,
for
example.
C
L
Yeah
I
mean
doing
interaction
is
if
the
future
says.
If
this
thing
is
no,
then
replacing
with
this
value,
then
that
would
so.
The
only
interaction
is
that
would
then
mean
that
we
wouldn't
call
the
converter
or
this
method
if,
if
the
feature
goes,
if
my
magician
is
missing
or
if
null
is,
if
null
is
the
value
or
my
know,
for
this
token,
then,
whatever
wouldn't
even
check
this
just
value
on
this
handle
no
we'll
just
be
replacing
it
with
a
default
value
weighted
right,
yeah,.
C
But
and
I
don't,
but
that
seems
to
kind
of
suggest
that
we
wouldn't
expose
the
boolean
here
at
that
seems
to
suggest
we
just
have
two
options
on
the
on
the
Jason's
settings,
and
it
would
say
you
know
default
belief
or
missing.
Property
is
one
setting
and
then
before
value
from
a
property
is
a
different
setting
right
right.
D
B
Yeah,
that's
that's
my
biggest
concern
for
confusion.
Is
that
the
especially
given
the
ignore
nulls
serializing
option
that
that
it
was
no,
and
you
thought
you
registered
a
thing
to
handle
that
on
deserialize,
but
it's
not
firing
and
it's
because
what
you
wanted
was
a
default
value
and
the
two
are
gonna.
Have
an
interesting,
intermix,
I,
agree
and
I.
Think
that's
the
the
biggest
concern
we're
having
is,
if
you
haven't
actually
finished
designing
what
you
would
want
to
do
for
default
values
that
this
may
be
premature.
L
Okay,
yep
I
will
yeah
that
make
sense.
I
will
I
do
I,
don't
think
that
yeah,
ok,
so
I'll
come
back
to
this
when
I
when
I
design,
something
for
default
for
replacing
nose
or
empty
strings
I,
don't
think
need
to
self.
Does
it
for
nose,
but
yeah
I'll
confirm
my
circle
back
here.
J
But
assuming
we
didn't
make
that
decision,
what
we
would
have
done
is,
you
know
you
just
have
to
handle
token
type
of
null
on
deserialize
and
then
check
for
null
I'm
see
realized
if
you
want
different
behavior,
so
I
mean
this
is
just
saying:
hey
ignore
our
special
logic.
We
have
and
call
the
normal
method
you
would
expect,
which
is
read
and
write
so
I,
don't
think
it.
Overlaps
with
defaulting
I
mean
I.
Think
that's
completely
separate.
J
You
know
missing
values
because
you
could
have
their
default
values
implemented,
not
within
the
converter,
I
mean
just
for
attributes,
etc.
But
anyway,
I
mean
I,
I'm,
fine
with
the
guidance
to
say,
go
and
think
about
defaulting,
but
I,
don't
think
the
over
around
I.
B
D
B
B
L
B
That,
instead
of
like
that,
because
you've
mentioned
default
and
you
said
default
or
null
and
if
default
takes
default
or
null
now,
you
have
to
understand
how
all
this
is.
Gonna
interact,
ignore
a
null
handle
null
default
or
null
like
you.
You
now
have
three
different
interpretations
of
what
null
means
and
can
you
write
a
consistent
users?
There's
only
one
interpretation
of
no.
L
D
F
L
To
handle
it
the
entire
wrapping
type
because
they
can't
handle
no,
for
they
can't
specify
what
should
be
pleased
to
know
value
is
so
I
think
when
it
comes
to
converters,
but
in
general
user
should
have
no
leeway
to
do
what
they
want
and
by
not
providing
a
way
to
Angelo
and
converter
is
not
complete
a
sense,
because
the
commodity
give
you
users,
which
completely
take
control
of
digitization
isolation.
I.
J
Mean
the
canonical
example,
I
think
is
a
string.
So
if
you,
if
you
see
a
annul
on
your
property
during
serialization,
you
want
to
write
empty
string
out.
If
you
see
a
null
coming
in,
maybe
because
it's
not
your
values
from
you
know
some
for
their
third
party,
then
you
want
to
set
your
property
to
empty
string
instead
of
known.
B
Exact
ANSI
it
in
the
in
the
in
the
you
know,
limited
scope
that
this
is
presenting
it
as,
but
that
it
feels
like
the
people
who
are
using
it.
Don't
understand
that
in
the
scope
is
presented
and
if
default
is,
if
the
default
proposal
comes
along
and
it
is
not
going
to
intermix
the
notion
of
I'm
reading
null
and
that
means
I
should
do
the
default
instead
of
null.
L
B
But
when
when
the
default
values
proposal
gets
looked
at
and
designed
and
whatever,
if
anybody
during
the
time
that
you're
looking
at
that
says,
oh
and
maybe
we
should
say
that
the
default
value
should
be
returned.
If
we
see
the
null
token
coming
in
now,
you
have
two
conflicting
interpreting
is
reasonable
to
see
in
that
case,
that.
L
B
L
See
that
during
this
Eclair
review
but
I
think
that's
the
direction
which
you
go,
that
if
we
do
the
default
value,
handling
wait,
that
would
only
apply
if
Jason
is
missing
and
then
we'll.
You
know,
since
we
already
have
a
solution
for
that
and
and
generally
so,
this
I
think
we
have
to.
Definitely
we
have
to
do
this,
and
one
thing
is
we
do
generally
don't
want
to
have
too
many
ways
to
do
the
same
thing
and
within
the
library
which
I
think
is
a
problem.
We
need
to
stop
Jason.
L
D
D
D
J
Yeah
I
mean
I
think
people
might
want
to
handle
in
all
different
lengths
differently
than
default
values.
So
I
I
mean
I'm.
Okay
with
saying
hey,
we
should
look
at
null.
Values
are
sort
of
default
handling
in
conjunction
with
this
I.
Don't
even
know,
however,
if
default
handling
is
on
the
radar
for
file,
I
mean
Leoni.
Is
it
its
back?
Look.
L
J
So
for
default
handling
today
you
have
to
set
your
field
or
your
property
in
the
constructor,
so
you
know
you
can
you
can
kind
of
do
it
today?
It's
clunky,
there's
no
callbacks
or
anything
like
that.
So
we
definitely
have
a
gap
with
the
default
value
handling
and
we
purposely
scoped
it
out
interview
one
but
I.
If
we
don't
do
it,
we
will
need
something
like
this
I
think
for
final
yeah.
This
is
backlog.
A
I
have
a
related
question.
We
had
talked
about
whether
there
should
be
a
difference
between
null
literally
being
on
the
wire
versus
a
property
not
existing
on
the
wire.
Do
we
have
evidence
about
how
commonly
that
difference
occurs
in
practice
like
do
we
have
evidence
that
that
services
actually
write
out
literal
moles,
rather
than
just
on
lighting
the
property
entirely.
L
C
A
Does
this
gets
to
what
what
was
being
mentioned
earlier
about
you
know?
Maybe
we
really
do
need
a
strong
difference
between
this
versus
something
didn't
exist
at
all.
I
know,
that's
something
I
think
Stevie
were
pushing
it
just
a
few
minutes
ago.
So
is
that
and
it
sounds
like
that's
something
you
want
to
keep
as
a
separate
proposal
rather
than
rolling
into
this.
It
does
seem
very
much
related
I.
L
Mean
if
we
draw
the
line
between
there
was
nothing
missing
in
Jason,
I
mean
those.
This
property
was
in
presidency
Jason
and
something
was
present,
which
is
know,
then
just
don't
know
it
they're
not
related,
because
the
converter
is
saying
I'm
sis
realized
something
which
exists,
whether
indigestion
or
or
from
the
CLR
type.
They
are
realizing,
so
the
converter
can
interact
with
anything
where
there's
no
Jason.
L
C
C
Either
is
insufficient
or
doesn't
have
enough
information
to
make
a
decision
right,
which
seems
you
should
probably
think
about
that
I
mean
another
option,
would
be
another
virtual
message
to
Jason
and
on
missing
the
video
or
something
right,
but
I'm
wondering
like
how
far
we
can
do
this
before
we
realize
that
you
really
need
a
generic
or
UCLA's
method
or
something
that
allows
you
to
inspect
the
object
after
deceleration
and
do
some
additional
stuff
with
it
right.
Please
please,
please,
please
know.
L
B
C
Difference
in
further
I
can
handle
it.
Yeah
I
mean
the
converter.
I
mean
it's
it's
the
seal
as
it
has
to
I
mean
this
is
the
party
of
deciding
that
right,
but
then
it
can
follow
the
information
to
the
converter
and
say,
like
oh,
the
property
that
I
that
you're,
the
type
of
was
missing.
The
payload.
No
give
me
more
everybody.
You
want
to
give
me
right
because.
B
The
string
scenario
on
this
one
I
mean
assuming
that
I
understand
how
the
API
works,
which
may
be
wrong.
If
you
wanted
to
normalize
the
null
value
for
Strings
to
the
empty
string,
you
would
register
adjacent
converter
of
string
like,
but
if
you
only
wanted,
then
the
null
value
for
a
string
to
be
the
empty
string
on
profile.
You
would
register
something
for
profile,
handle
all
the
properties
individually
for
profile
and
then
say:
oh,
you
never
gave
me
a
profile
URL
or
you
gave
me
a
null
profile.addlocation.
C
You
said
the
two
options
you
have
I
mean
they
make
sense
to
me.
That's
why
I'm
saying
if
you
do
it
in
the
converter,
you
would
handle
it
for
every
single
property
that
is
of
that
type
right,
which
might
be
useful
right
because
you
may
not
want
to
do
that
for
every
single
object
in
your
payload,
whether
you
just
want
to
turn
the
type
once
and
for
all
right,
maybe.
C
B
That's
that's
the
the
Corey's
question
of
what's
the
scenario,
because
if
it's
turned
an
empty
string
or
the
null
string
into
the
empty
string,
I,
don't
think
we
really
want
people
registering
Jason,
Converter
of
string
that
like
instead,
they
would
be
registering
a
converter
for
their
custom
type.
That
says
that
when
it's,
this
property
on
this
type
do
something
different,
which
is
sort
of
kind
of
the
same
as
the
artists
always
call
back,
except
with
less
you
didn't
pay
attention
to
what
properties
actually
got
set
security
bugs
as.
J
And
today
you
can
do
all
of
this
just
without
the
null
right.
So
just
because
we
added
this
quirk,
almost
you
can
call
it,
and
v1
is
the
only
reason
why
we're
having
this
discussion.
Otherwise
you
know
on.
Do
you
realize
you
know
you
can
have
a
string
property
map
to
an
int,
you
know
Jason
and
you
just
check
hey
as
a
token
type.
Int.
Okay,
well,
you
know,
call
int
2
string
and
set
the
string
or
return
the
string,
so
so
having
another
token
type
of
null.
J
You
know
it's
completely
normal
I
think
coming
in
for
deserialize
I'm
going
out
it's
the
same
thing.
Normally
you
get
every
single
value
of
your
object.
However,
we
thought
the
serta
Lizer
would
just
remove.
You
know
the
possibility
bugs
and
then
the
perfect
things
will
we.
This
is
a
case
basically
where
we
limit
the
capability
of
the
converter,
because
it's
not
called
I
think
is
the
only.
B
C
Yeah,
how
about
this
I
mean
I,
agree
with
you
on
that
one
and
I
I
don't
want
to
block
the
feature
for
much
longer,
but
it
seems
like
at
least
I
would
like
to
see
us
being
confident
about
that,
and
it
seems
based
on
the
discussion
that
David
on
really
seemed
to
know
how
we
would
handle
that
case.
Right.
C
Yeah
I,
don't
necessarily
ask
for
like
a
full
design
where
that
consists.
Like
you
know,
if
somebody
can't
describe
to
me
how
this
would
work
roughly
and
then
say
this
is
why
I
believe
it
doesn't
interview
this
feature,
this
exposes:
is
the
bool
is
totally
fine,
I'm
totally
fine
with
it.
I
just
wanna
make
sure
that
we
have
that
level
of
confidence,
and
this
discussion
doesn't
necessarily
inspire
the
confidence.
B
B
L
Not
to
say
that
that
default
handling
feature
before
if
Jason
is
missing
and
not
for
if
Jason
is
no
because
convert
attribute
and
no
in
my
opinion
should
be
to
do
anything
with
whatever
Jason
is
there.
So
if
we
decide
that
that's
the
way
that
no
can
be
replaced,
then
I
I
would
say
that
I
wouldn't
propose
default
value
hand
in
the
handle.
The
case,
where
did
the
Jason
is
known.
D
L
A
L
Jessie,
if
we're
talking
about
no
and
missing
I,
think
there'll
be
a
case
of
one
feature
trumping
over
the
other
one.
So
it's
a
stretch
to
say
you
have
to
like
use
a
converter
for
this
case
and
the
priority
well,
no
use
is
too
bad
to
see
if
you
want
to
handle.
You
know,
if
you
think
is
know,
then
you
know
use
the
converter
zip
into
entity
and
because
that
feature
they
already
exist.
So
most
people
already
have
logic
in
the
converters
down
to
this.
L
If
you
have
to
do
it
and
then
for
default
value
hanging,
no
puts
it
to
default
value
attribute
to
specify
what
well
you
want
to
replace
things
with,
and
then,
if
Jason
is
missing
would
use
that
values.
So
in
that
way,
I
think
that's
a
pretty
I.
Don't
think
it
has
to
be
ceremonious
where
it's
a
big
problem
where
we,
you
have
to
do
poor
things,
and
maybe
people
generally
use
converter
to
handle.
L
D
C
Yeah
so
Magda's
deeds
work
like
if,
if
you
feel
like
you
have
a
high
confidence
plan
during
the
week
and
it's
just
a
minor
modification
of
what
you
have,
you
can
also
do
it
over
ma.
I
don't
have
to
wait
for
a
full
week
if
you,
if
you
need
to
make
it
forward,
but
you
know
give
me
the
only
a
50
minutes
left.
So
we
should
look
at
the
next
issue
that
you
have
the
support
for
non-public
exercise.
Thank
you,
yep
yeah,
this
make.
Hopefully
this
is
easy.
L
Okay,
so
there
are
two
issues
these
so
future
part
is
one
separate
issue
and
non
public
access
or
support
is
another
issue.
Do
so
so
I
proposed
out
I,
just
both
of
them
since,
like
I'm,
proposing
similar
API
202
scenario,
so
starting
with
so
non-public,
accesses,
serialization
and
deserialization?
So
so
this
is
not
talking
about
non
public
properties.
L
L
So
right
now
we
do
not
use
the
non-public
sector
for
this
realization,
but
it
can
be
serialized
and
people
want
away
to
as
part
of
the
public
contract.
So
people
want
able
to
me
to
deserialize
it
and
then,
although
non-public
data
is
not
common
and
also
not
really
requested,
I
include
support
for
this,
because
Newton's
off
has
parity
and
it's
chipped,
implement
and
test
and
I.
Don't
think
we
need
to
further
complicate
the
API
to
support
this
in
the
future.
L
I
think
by
just
opting
in
in
the
way
of
describe
issue
way
to
handle
both
non-public,
Gator
and
non-public,
cetera
to
test
non-public
accesses.
So
few
supports
there's
no
way
to
see
lies
and
easily
using
the
serializer.
We
scoped
out
of
t1,
so
just
note
that,
according
to
guidelines
that
Jerry
now
recommended,
but
the
net
itself
uses
these
types,
I'm
use
these
fields,
thankfully
tuples
so
dis,
which
all
support
well.
E
B
L
C
Honestly
would
say
my
line
in
the
sand
is:
if
you
want
to
civilize
fields,
for
whatever
reason
or
private
fields,
you
have
to
mark
the
type
like
I
think
like
we
don't
want
to
be
in
a
world
where
people
can
globally
turn
it
on
for
any
random
type,
but
to
Stevens
Point.
It's
not
a
breaking
change.
If
we
changed
internals
of
the
type,
that's
a
completely
compatible
change
right.
It's
just
that.
C
C
L
So
this
wound
support
this
dude.
So
down
will
not
support
non-public
fields.
You
only
be
for
public
shoot,
so
someone
can
reserve
the
right
to
say
hey.
You
are
not
serializing,
my
huge
before
don't
serialize
them
know.
This
is
what
this
would
provide,
but
this
doesn't
provide
support
for
big
ships.
Yeah.
A
C
It's
just
that
if
we
combine
the
feature
where
you
accidentally
or
intentionally,
it's
your
less
private
state
that
that
doesn't
work
right,
because
people
always
use
member
types
and
their
public
types
yeah.
It's
like
stringing,
a
list
of
three
or
something
like
yeah
yeah.
That's
that's
I,
think
why
we
need
to
be
careful
that
we
don't
design
a
feature
with
people
either
intentionally
unintentionally.
You
can
see
all
that's
private
state,
all
fabric
types
right.
L
That's
something
something
we'll
have
to
communicate,
because
if
you
look
at
I
mean
people
wanted
and
I
think
we
just
have
to
document,
it's
not
super
clear
what
the
implication
will
be
just
yet
because
we
don't
know
if
we're
going
to
be
generated.
If
we
do
generalizes,
we
might
generate
them
on
T
type
themselves
when
another
design,
so
that
might
not
be
a
problem.
Otherwise
that
would
be
a
problem.
So
I
think
tell
Vic
is
what
we
communicate,
that
certain
like
non
public
usage
can
force.
L
B
B
A
L
Right
actually
can
lead
DCM,
like
reflection,
not.
A
G
A
The
the
run
time
has
gotten
a
lot
stricter
lately
about
being
able
to
write
to
things
that
are
marked
as
read-only.
For
instance,
if
you
try
using
reflection
to
overwrite
the
property
of
a
static
read-only
field,
we
may
have
already
cogent
the
value
of
that
and
burned
the
value
into
various
call
sites.
At
that
point,
reflection
will
actually
throw
an
exception.
Saying
like
I've,
already
gone,
the
sorry
I
can't
do
anything
for
you.
You
can
imagine
in
the
future,
that
being
extended,
to
instance,
properties
or
instance,
fields
as
well,
bunch
of
static
fields,
yeah.
B
J
I
J
C
L
C
L
J
We
could
have
said
Jason
object,
serializable
or
something
like
that.
I
mean
it,
but
it
only
is
applied
to
classes
and
strokes.
I.
C
Couldn't
merge
them,
I
mean
first
example
like
it
seems
odd
to
me
to
apply
the
the
the
they
attribute
to
the
whole
type.
It
seems
much
more
in
line
with
saying
you
need
to
apply
them
to
the
individual
members.
You
want
to
be
civilized
and
then
you
can
have
just
Jason
property
attribute,
and
then
you
know,
for
example,
have
additional
settings
and
that
one
to
say
what
do
you
want
to
do
with
non-public
accessories
right
if
you
apply
to
a
field
that
doesn't
apply,
but
if
you
apply
the
property
back
to
the
appliance
right
so.
A
One
benefit
to
applying
it
to
the
type
rather
than
to
the
individual
members
is.
If
you
have
a
code,
if
you
have
a
source
generated
partial
class,
you
can
apply
the
attribute
to
a
dummy,
partial
declaration
that
that's
similar
to
how
data
annotation
juice
to
work
way
back
in
full
framework.
You
can't
necessarily
easily
do
that
at
the
property
or
member
level.
A
D
C
L
L
C
I
think
I
would
encourage
us
to
to
avoid
too
many
switches
that
are
overlapping,
because
that
eventually
results
in
a
complicated
stage.
Reason
about
like
what
we
know
about
takes
precedence
and
what
doesn't.
But
it
generally
seems
to
me
that
if
we
believe
that
fields
are
somewhat
rare
and
if
we
generally
believe
that
that
you
know
non-public
accessories
are
kind
of
rare,
then
I
think
it
makes
more
sense
to
me
that
you
apply
and
it's
similar
to
rename.
So
he
said
renaming
happens
at
the
member
level.
C
You
put
the
attribute
on
the
member
you
want
to
rename
and
because
this
is
somewhat
rare
scenario
and
for
the
global
things
that
are
common,
that
I
tested
Kate's
may
have
a
global
setting
right,
so
I
can
buy
the
global.
You
know,
please
include
public
fields
because,
as
Jeremy
said,
public
field
streams
generally
fine,
but
anything
that
involves
non
private
store
and
that's
a
non
public
state
should
be
an
opt-in
for
a
member,
in
my
opinion,
because
it
seems
to
be
somewhat
rare
and
yeah.
C
B
Mean
and
in
the
JSON
object,
attribute
type
right
now
like
right
now,
there
are
two
things
and
you're
like
fine.
If
you
specify
that
you
probably
wanted
them
both
to
be
included,
so
there
ignore
to
change
the
default
that
anything
future
would
have
to
have
a
the
opposite
state
for
a
default,
because
it
would
be
behavior
preserving.
So
it
would
need
to
be
written
the
other
way
anyway,
but
yeah
I
think
that
we
should
get
rid
of
the
type
level
one
in
just
just
the
member
level.
One
and.
C
L
N
B
B
Yes,
but
all
of
these,
you
then
have
to
ask
the
question
of,
as
we
start
being
trying
to
be
more
inclusive
of
äôt
environments
like
what
of
this
is
going
to
start
randomly
failing
when
you
start
doing
a
target
specific
äôt
single
file
distribution
like
the
does
the
entire
serialize
or
stack
fall
on
the
floor,
like
you,
just
we're
adding
a
lot
of
things
in
the
same
release,
and
it
seems
like
this
isn't
interacting.
Well
with
other
things.
We
want
to
add.
C
Yeah
you
did
that
or
the
way
I
understood
comment
was
that
one
way
to
do
civilization
is
that
we
generate
the
the
the
code
written
sterilizer
as
part
of
a
member
of
the
types
themselves,
in
which
case
they
can
clearly
see
their
own
privates
right.
It
would
just
mean
that
if
you
can't
do
that,
then
you
know
what
happens
if
you
take
we've
also
generator
you
take
a
random
assembly
and
try
to
use
it
on
iOS.
What
it
just
means
you
fall
back
to
reflection
and.
C
No
soap
yeah
it
for
that.
Take
yeah,
that's
the
thing
we
should
avoid,
though,
because
these
are
kind
of
the
landmines.
Two
people
really
dislike
right
because
it's
it's
hard
to
reason
about
behavior
changes
that
are
like
cross-cutting,
like
you
know,
äôt,
on
safety
off,
but
it
kind
of
makes
sense
for
things
that
you
know
you
generate
cold
weather.
Think
people
can
understand
that
reflection.
It
doesn't
work
on
an
iPhone
right,
but
it's
very
hard
to
reason
about
all
the
features
that
happen
to
use
reflection
and
its
implementation
right.
B
I
mean
like
the
notion
of
so.
If
you
have
to
put
the
properties
on
every
individual
member
and
then
then
yeah
you
had
to
control
the
type
to
do
it,
generating
it
inside
the
same
type
works
and
there's
no
weird
external
state.
That's
going
to
rewrite
what
all
that's
doing,
and
so
so
it
that
makes
more
sense
than
some
bigger
level
options.
Doesn't.
A
C
C
J
L
C
Let
me
just
summarize
what
we
have
and
then
we
can
look
at
this
in
the
window,
because
I
think
it
will
be
hard.
Otherwise
it's
a
API
surface
to
reason
about
so
what
I
heard
is
nobody
has
an
objection
with
the
global
setting
right
so
long.
It
only
applies
to
public
correct.
Is
that
a
fair
summary
correct.
A
J
L
All
right,
great,
the
reason
why
I
mean
if
somebody
has
included
fuse
on,
but
somebody
who
doesn't
want
you
included
even
I,
have
to
like
put
Jason
ignore
and
everything
on
there.
No,
no
their
fields
for
it
touch
with
it,
which
is
just
like
something
top-level
saying,
hey,
don't
include
any
of
my
fields
but
I
guess
that's
fine!.
J
B
Like
I
get
JSON
object
as
a
attribute,
it
just
doesn't
scale
with
the
were
you're
opting
in
to
ignore,
because
any
future
additions
would
have
to
be
opted
in
to
include,
and
so
then
the
argument
of
it
lets
you
avoid
jason.
Ignore
is
limited
to
exactly
this
release
and
doesn't
stretch
beyond
so
I.
Think,
there's
having
a
consistent
story
going
forward
is
better
than
having
a
convenience
in
this
release
and
we
can
always
totally
optional
drink.
L
C
L
L
B
L
C
C
B
J
Okay,
just
to
clarify,
though,
the
original
proposal
only
applied
to
properties,
if
they,
if
the
property
itself
was
public
and
then
of
course,
the
setter
and
getter
can
have
either
one
of
one
of
them,
and
we
could
have
you
know
internal
or
private.
So
we're
saying
that
on
now
we're
gonna
loosen
that
up,
and
it
applies
no
matter
what
the
property
is
declared
is
as
long.
J
M
J
A
C
C
L
C
L
I
mean
very
duly
to
touch
him
and
get
only
what
to
do
soon.
So
if
it
doesn't
have
a
get
it
get
that,
then
this
one
provides
support
because
I
mean
there's
no
there's
no
set
that
you
use
even
use
the
parameter,
constructor
feature
or
there's
like
a
feature.
Maybe
post
file
where
we
see
like
object,
handing
object,
object,
region,
Christian,
Hanlon,
where
we
can
reuse
the
the
instance.
If
it's
already
instantiated.
C
So
if
you
have
a
property
that
is
read-only
right,
so
it
has
it,
but
it
has
a
private
setter
right
today.
Be
would
only
see
Eliza,
but
we
wouldn't
deserialize
it
nope
I've
wanted
diesel.
Is
it
I
only
have
to
put
this
Jason
member
had
to
be
on
it,
and
that
would
work
right.
Yes,
that's
right.
I
told
you
asking
about
if
you
didn't
have
a
set
at
all,
so
if
it
doesn't
have
a
setter
at
all,
then
I
think
it
would.
B
The
only
thing
that
I
think
you
couldn't
do
easily
easily
is,
if
you
had
an
internal
property
that
you
wanted
to
serialize,
but
not
deserialize,
and
then
the
answer
is
make
another
internal
property.
That
only
has
the
get
calls
the
get
of
the
pretty
that
you
care
about
and
put
Jason
number
on
that
and
and
Jason
property
name
like
you
can
work
around
it
at
that
point
and
I.
Don't
think
we
need
to
say.
Oh,
this
was
a
non-public
get,
but
I
want
you
to
now.
B
L
C
You
know
we
should
we
should.
We
should
just
use
Jason
exclude
so
Jason
ignore
them,
because
if
you
put
both
of
them,
I
would
say
it's
probably
a
bug
on
the
developer
side,
but
that
I
would
probably
strip
of
an
analyzer
if
we
cared
enough,
but
at
one
time
I
would
just
say:
if
Jason
ignore
specify
you,
don't
you
don't
utilize
it
all.
B
B
J
C
G
C
D
B
B
B
B
L
C
J
Whether
they're,
private
or
internal
really
doesn't
matter,
but
if
it
becomes
a
common
pattern-
and
you
know
everyone
starts
doing
it
this
way,
then
we've
very
constrained
by
what
we
can
do
for
the
cogeneration
I
mean
basically
the
the
cogeneration
converter
has
to
live
on
that
type,
but
by
opening
up
into
none
public
setters
anyway,
you
kind
of
have
the
same
problem,
but
it's
just
not
gonna,
be
as
pervasive,
I
think.
But
as
long
as
there's
no
security
concerns,
I
thought
there
was
a.
J
Element
behavior
for
four
privates
I'm,
assuming
it's
not
gonna,
be
difficult.
You
know,
assuming
we
can
do
it.
Fine!
It's
just
concern
there.
B
J
Only
right
so
I
guess
that's
a
concern
for
perf
anyway,
but
I
guess,
if
somebody's
doing
that
they
probably
have
a
good
reason
to
do
it.
I
mean
making
private
setters
and
getters
and
feels
amazing
didn't
get
more
perfect.
That.