►
From YouTube: JSON DOM API Review
Description
Powered by Restream https://restream.io/
A
A
A
A
Of
course,
now
the
team's
window
is
minimized
again
to
make
my
life
fun
all
right,
so
we
know
we
are
live
again
and
today
we
are
focusing
on
our
jason,
dom
apis,
steve
or
leone.
Do
you
want
to
take
it
away.
B
Yep
sure
so
just
some
background,
we
did
the
first
apr
review
a
month
ago
or
so
and
based
upon
that
feedback
plus
other
feedback,
including
the
azure
sdk
team
and
additional
prototyping
there's,
some
changes
made.
The
the
two
biggest
api
changes
since
last
time
was
that
there
was
a
separate
inheritance
hierarchy
for
dynamic,
plus
and
non-dynamic
scenarios.
B
B
The
other
api
change
was
based
upon
p
feedback
around
not
having
all
static
parse
methods
and
like
two
json
string
type
serialize
methods,
because
those
are
kind
of
optional.
The
json
serializer
methods
could
be
used,
but
anyway,
based
upon
that
feedback,
I
added
those,
and
then
I
added
some
additional
background
and
stuff
to
the
design
dock
and
we
don't
really
have
time
to
go
through
the
through
the
design
dock.
So
I
think
I'll
be
kind
of
quick
here
and
just
wait
till
questions
pop
up.
B
This
overview
section
here
just
says:
we
have
a
lot
of
different
people
that
want
to
use
this,
including
people
that
want
to
use
the
serializer,
maybe
but
can't
so.
I
I
do
think
that
this
api
will
be
commonly
used.
B
The
high
level
api
is
shown
here,
it's
an
abstract,
json,
node
based
class
and
then
three
derived
classes
for
object,
array
and
value,
and
then
the
value
has
a
little
twist
in
it
that
there's
a
generic
pattern
there
to
avoid
boxing
more
or
less.
B
So
today,
system
types
ethan
does
not
have
a
writable
dom.
It
does
have
json
document
adjacent
elements
which
are
read-only
version
of
the
dom,
and
this
can't
really
be
easily
directly
extended
for
writability.
So
the
thinking
was
that
we'll
have
some
interop
with
that
and
then
create.
You
know
a
new
api
json
node
for
the
writable
dom,
and
it
could
also
be
used,
of
course,
in
read-only
mode.
But
if
you
want
you
know,
raw
performance,
json
element
will
still
be
better.
In
many
scenario,
all
scenarios.
B
Layering,
this
section
just
says
that
json
node
uses
json
element
during
deserialization,
meaning
that
when
you
call
like
a
parse
method
on
json
node,
it
only
uses
json
element
and
then
it
maintains-
or
it
holds
a
reference
to
adjacent
element
for
performance.
The
super
fast
lazy
creation
of
nodes
and
during
serialization,
then
jason
node
will
will
either
use
json
element.
If
things
haven't
changed,
you
know
if
you
haven't
modified
the
data
or
it'll
use
the
raw
values
that
were
added.
B
You
know
to
the
collection
or
object
or
set,
and
then
it
uses
a
serializer
for
that,
and
I
just
have
a
little
clarification
here,
because
this
was
this.
This
did
come
up
quite
a
bit
last
time
that
you
know,
does
it
make
sense
to
use
a
serializer?
So
I
added
this
section-
and
it
says
layer
on
the
serializer
is
necessary
to
support
the
dynamic
cases
where
you
can
assign
you
know
any
arbitrary
clr
type.
B
You
know
whether
it's
a
poke
or
a
collection
or
whatever
to
an
object,
and
you
expect
that
to
work
well
that
uses
a
serializer
today.
So
you
know
the
sterilizer
has
to
be
used
at
some
level
and
then
also
if
we
layer
up
on
the
serializer
and
we
have
the
json
serializer
options
available,
then
we
can
support
custom
data
types
and
other
serializer
features.
If
we
want.
B
So
yeah
api
walkthrough
section
to
kind
of
reiterate
some
of
this.
It
basically
says
when
you
deserialize
json
node.
Again
it's
going
to
hold
on
to
json
element
and
it
and
then,
when
you
kind
of
switch
to
an
edit
mode,
where
you
start
then
modifying
values
or
adding
values
to
an
array
or
mod
or
an
object,
then
you
can
enter
this
edit
mode
and
then
you
no
longer
really
use
json
element.
B
You,
you
know
you
create
the
raw
clr
types
for
values
like
you
know
that
a
double
for
example,
or
you
create
a
json
array
to
represent
a
a
collection
or
you
create
a
json
object
to
represent
an
object
with
properties.
B
So
once
you
once
you
enter
this
edit
mode,
json
element
is
no
longer
used
and
instead
the
rob
clr
primitives
are
basically
stored,
and
I
have
a
code
example
here
which
is
important
because
if
you
just
want,
if
you
have
a
adjacent
node-
and
you
know
it's
a
primitive
and
you
want
to
get
the
value
out
of
it,
you
don't
really
care
if
it
came
from
a
json
element
or
if
it's
in
this
edit
mode.
B
C
B
Yeah
yeah
and
the
prototype
actually
does
do
this
already,
so
you
can
use
that
as
a
reference,
if
you
want,
but
what
it
what
it
does
is
as
soon
as
you
touch
it
adjacent
object,
for
example,
you
add,
you
add
something
to
it.
For
example,
then
it
will
convert
those
json
that
internal
json
element
to
json
nodes.
B
So
if
you
have
an
object
with,
you
know,
10
properties
internally,
before
you
touched
it,
it
just
hold
on
to
adjacent
element,
which
you
know
points
to
a
json
document
which
contains
your
raw
data
somewhere
but
yeah
as
soon
as
you
touch
it
the
same
for
an
array,
then
it
will
kind
of
throw
away
its
internal
instance
and
and
populate.
B
And-
and
there
is
yeah
the
dirty
bit
does
does
propagate
up
it's
needed.
I
guess
for
internal
implementation.
I
mean.
B
B
Yeah
just
that
one
node-
and
I
do
this-
is
discussed
a
little
bit
later
on
it's
so
shallow
creation.
B
Yeah,
it
is
it
that
is
important,
it's
not
obvious.
What's
going
on
because
jason,
node
and
jason,
I
mean
sorry
on
json
object
and
json
array
do
not
expose
any
kind
of
property
that
lets.
You
know
what
mode
is
in
it
just
will
switch
based
upon
enabling
edit
mode.
E
E
One
thing
that
is
kind
of
different
between
the
existing
dom
apis
and
this
api
is
that
that
existing
dom
api
there's
only
one
class
and
it
holds
byte
array
and
you
can
refer
to
you-
know
json.
You
can
kind
of
work
the
virtual
tree
of
json
elements,
but
json
elements
are
struct,
so
they
don't
cause
basically
walking
the
tree
doesn't
cause
any
allocation
in
this
mutable
dome
design.
E
E
B
Yeah
there's
a
lot
to
that
comment.
Yeah
so
I
mean
originally.
When
we
created
the
read-only
dom.
I
think
the
intent
was
that
maybe
we
can
switch.
You
know
enable
editable
in
some
cases
in
there,
but
it
turned
out
that
did
the
prototype
effort
in
fibo
that
that
was
kind
of
abandoned,
and
I
I
others
can
chime
in
here
that
were
part
of
that.
B
I
wasn't
directly
involved
with
a
lot
of
those
reviews,
but
in
either
case
yeah,
so
it
ended
up
with
a
model
similar
to
what
we
have
here
with
classes
and
not
structs,
primarily
because
yeah
it
doesn't
allow
an
inheritance
hierarchy.
B
B
And
I'll
back
up
a
little
bit
and
say
what
I
said
earlier:
that
if
you're
in
read-only
mode,
you
can
still
enumerate
the
entire
graph
with
very
minimal
minimal
allocations,
for
example,
if
you're
just
reading
at
a
certain
level,
you
need
to
go
down
10
levels,
you
can
go
to
found
10
levels
in
your
graph
or
and
get
a
class
out
of
it,
and
you
won't
have
to
necessarily
affect
other
things
within
that
graph.
So
if
you're
just
doing
a
partial,
you
know
graph
or
tree
walk,
it
is
fairly
efficient.
B
I
think
it's
as
efficient
as
you
could
get
with
the
current
design.
Anyway,
if
you
wanted
to
avoid
lx
and
and
as
you
like,
you
said
and
then
somehow
store
those
like,
we
do
with
jason
document
yeah,
that's
possible.
I
guess
I
don't
know
how
important
that
is
right
here.
C
I
I
mean
the
biggest
problem:
kristoff
was
the
api
usability
like
the
the
fact
that
it's
rep,
the
json
element
is
representing
several
different
types.
Methods
are
all
mode
based,
it's
a
very
complicated
thing
to
use,
and
once
we
started
adding
editing
into
it,
it
got
terrible,
and
I
think
that
the
same
would
be
true
if
we
tried
to
make
a
second
thing,
having
the
same
struct
semantics
with
complexity
like.
C
E
E
I
think
you
can
do
the
same
thing
with
sharks.
Basically,
you
have
a
you
know:
json
nodes,
struct,
and
then
you
have
to
check
whether
it's
an
array
on
there
or
an
object
or
a
value,
and
then
you
cast
it
and
now
it's
not
a
natural
cast,
but
rather
a
cast
that
is
provided
on
json
node
and
it
lets
you
cast
it
to
you,
know
json
array
or
json
object
or
or
a
primitive
value.
E
E
B
The
it's
not
not
assuming
the
struck
today
is
very
if
you're
just
reading,
it's
very
optimized
for
the
read
cases
today
I
mean
the
current
design.
It
will
create
one
instance
per
node
as
you're
navigating
down
one.
You
know,
instance
of
a
class,
but
it
won't
necessarily
fully
populate
every
child
or
array
element,
etc.
Until
you
touch
it.
E
C
C
Over
the
reference
data
anytime,
you
mutate
it
you'll
have
to
have
reference
data,
otherwise
or
because
you
want
class-like
semantics,
but
now
we
are
introducing
this.
It
sounds
like
a
massive
complexity
of
well.
You
know
that
structs
have
complicated
mutation
semantics,
but
this
struct
is
okay.
It
totally
has
same
mutation
semantics
because
it's
not
really
a
struct,
it's
a
cursor
and
we
don't
really
have
those
and
like
it
feels
like
you're
suggesting
introducing
a
new
concept.
E
B
Okay,
so
I
kristoff
is
coming
from
the
azure
sdk
side,
where
they
do
have
a
single,
concrete,
json
data
type
and
we
have
yet
to
and
one
of
the
to
do's
we
we
have
on
this
is
to
work
on
some
usability
studies.
They've
already
done
a
lot
and
also
you
might
have
some
performance
characters
characteristics
that
we
haven't.
B
You
know
moved
up,
but
I
I
do
think
that
it
would
be
interesting
to
compare
json
data
in
edit
mode,
for
you
know,
for
both
cpu
performance
and
for
memory
and
and
measure
the
results,
because
I
I
don't
think
depending
on
the
scenario
I
I
I
don't
know
how
important
it
is.
I
mean
it's,
you
can
create
yeah,
definitely
thousands
of
of
instances
of
json
nodes
in
an
edit
mode.
If
you're,
you
know
setting
thousands
of
properties,
for
example,
or
adding
thousands
of
elements.
B
So
if
that
is
important
use
case,
there's
a
couple
things
we
could
do.
We
could
switch
to
something
like
that
with
a
single
struct
or
we
could
actually
add
if
we
wanted.
If
the.
If
the
modifications
are
somewhat
sparse,
I
think
we
could
have
better
interop
with
json
element.
B
There
are
some
interrupt
with
json
element
already
that
enables
you
to
forward
to
a
node,
but
we
could
also
have
interrupt
where
you
can
ask
for
a
node
from
a
json
element
and
then
modify
it
and
then
I'll
write
back
to
the
to
the
json
element.
You
need
no
json
element,
you
know
temporary
json,
node
or
something
and
then
back
again
so
I
mean
we
could
do
something
like
that,
but
I
I
think
that,
for
purposes
of
the
api
presented
here,
we
should
table
that.
E
E
Kind
of
move
forward
and
start
talking
about
the
other
apis,
but
I
do
think
that
it's
an
idea
worth
exploring
and
to
answer
your
question
about
whether
it's
you
know
worth
it
or
needed
the
way
I
think
about
it
is
if
there's
a
cost
of
doing
something
like
this
like
there
are
some
negatives
that
we
can
articulate,
then
surely
there's
a
trade-off
and
we
should
think,
like
you
know,
is
it
worth
it
and
measure
performance?
E
E
So
I
would
kind
of
just
try
with
tracks
it's
cheaper
and
then
you
know
till
we
know
what
negatives
of
trucks
are
in
this
in
this
case,
but
I
thought
I
think
I
honestly,
I
think
the
only
thing
that
would
change
if
we
change
these
things
to
sharks
is
that
you
know
the
the
cast
would
not
be
natural
costs.
E
You
would
have
to
add
implicit
or
explicit
costs
to
the
to
the
structs
and
then,
of
course,
the
implementation
would
change
a
lot.
A
I
mean
I
can
buy
that,
but,
like
the
one
thing
I
think
we
should
avoid
is
that
we
build
yet
another
thing
in
the
middle,
because,
if
there's
fundamental
limitations
that
we
can't
easily
provide,
for
example,
let's
say
we
want
to
support,
link
style
navigation
operations,
and
we
say:
oh
that
doesn't
really
work
well
with
structs.
Then
you
know
I
don't
want
to
have
the
world
eventually
have
three
domes
right,
a
purely
the
only
one.
You
know
a
cheap
read,
write
one
and
then
a
convenient
one
right.
That
would
be
pretty
terrible
so
like.
A
E
E
Yeah,
so
if
we,
if
we
discover
concrete
problems,
definitely
is
what
I
was
saying
like.
It
would
be
good
to
know
what
the
negatives
of
making
these
things
tracks
really
are
right,
because
it
seems
like
now.
We
have
some
ideas
that
there
may
be
some
problems,
but
nobody
really
knows
how
to
like
articulate
concrete
problems.
A
I
mean
we
do
kind
of
know
that
structs
as
soon
as
you
do
mutations
are
getting
complicated
right.
So
I
mean
that's,
certainly
something
we
have
to
figure
out
how
we
maintain
like
identity
and
reference
semantics.
As
soon
as
you
manipulate
the
dom
right-
and
I
can
totally
buy
that
we
can
have
internal
classes
that
do
that
for
us
and
we
just
basically
do
them
lazily,
and
so
we
can
get
a
wave
of
allocation
free
reads,
for
example,
but
you
know
we
should
really
make
sure
that
we
can
do
that
in
the
way
we
like.
G
And
at
the
same
time,
if
you
look
at
how
other
languages
do
the
dom,
it's
generally,
you
generally
get
reference
semantics,
not
value
semantics
when
you're
manipulating
it.
If
you
do
dom
dot,
you
know,
item
dot,
nested,
item
dot,
nested
item
and
then
mutate.
It
you're
mutating
the
original
dom.
Whereas
if
we're
returning
structs
you're
going
to
get
a
copy,
you
have
to
mutate
the
copy
and
then
reassign
it
back.
E
A
C
Over
there
it'll
be
a
very
complicated
dictionary
since
the
struct
can't
change.
I'm
holding
json
elements
to
I've
now
mutated
element,
number
17.,
so
you'll
end
up
with
a
basically
a
dictionary.
That
is
the
size
of
the
number
of
elements
in
your
tree,
which
is
possibly
going
to
end
up
being
worse
than
if
you
just
had
particle
semantics.
G
E
Anyway,
we
shouldn't
be
spending
too
much
time
on
it.
You
know
something
to
think
about
and
or
explore,
but
up
to
you.
A
Yeah,
so
I
think,
for
the
purposes
of
this
meeting,
let's
let's
go
with
the
design
as
it's
proposed
right
now
and
then
maybe
we
should
have
a
separate
follow-up.
That
just
says
like
how
does
the
like
it
sounds
like
you
guys,
already
have
a
struct-based
design
that
you
usability
tested
and
it
would
be
worthwhile
just
looking
into
that
and
see
how
that
fares.
E
E
We
tried
several
approaches.
All
of
them
have
very
significant
problems,
so
I
think
this
kind
of
you.
B
B
Yeah,
so
I
mean,
even
even
with
the
proposal
that
you
have
just
based
on
usability
alone,
you
you
might
be
tempted
to
switch
to
reference
semantics.
F
E
B
Going
okay
and
yeah
and
backing
up
a
lot
more
that,
as
I
mentioned
in
the
beginning,
the
design
was
based
upon
learning
from
different
areas
and-
and
you
know
a
couple
of
the
reference,
the
the
two
reference
implementations
we
kind
of
have
are
the
prototype
we
did
in
fiber,
which
has
reference
semantics
and
also
newton's
soft
j
token,
which
has
reference
semantics,
but
yeah.
B
We,
let's
just
hold
a
follow-up
after
this
then,
and
we
can
both
think
about
it,
and
I
can
you
know,
do
some
additional
prototyping
if
we
need
to
and
on
that
yeah
that's
good.
B
Okay,
yeah
keep
scrolling
down,
we
can
get
to
the
api
portion.
This
is
background.
Reading,
okay,
so
it
starts
with
this
abstract,
json
node
class.
That
interface
implements.
I
dynamic
meta
object
providers
for
on
the
c-sharp
dynamics,
support
it's
there's
only
one
method
on
it
and
it's
implemented
explicitly
later
and
originally
a
month
or
so
ago
we
had
to
have
a
different
inheritance
hierarchy,
because
I
thought
that
the
linker
wouldn't
be
able
to
remove
on
the
references
system
link
expressions,
but
it
turns
out.
B
I
can
I'm
not
sure
how
you
want
to
do.
Example,
I
could
walk
method
by
method
or
you
can
watch
method
by
method.
You
have
a
preference.
A
So
I
I
I
guess
like
last
time,
I
took
some
high
level
notes
and
maybe
it
might
be
you
worthwhile
to
just
ask
the
questions
and
how
the
design
has
changed
to
the
notes
from
last
time.
That
might
be
good
as
a
starting
point.
So
last
time
I
said,
like
your
design
is
seems
to
be
intertwined
between
the
serializer
and
the
dom
giving
it
the
cursory
read.
It
looks
like
you
have
kind
of
undone
that
can
you
talk
a
little
bit
about
that.
B
Well,
at
least
for
sure,
let
me
explain
these
these,
these
church
syntax
support,
which
is
the
the
this
method
indexer
for
int
index.
So
this
is
kind
of
interesting,
so
yeah,
the
indexer
that
takes
end
the
command
says
it's
for
jason
array,
church
syntax.
So
this
allows
you
to
quickly
get
an
element
of
an
array
without
having
to
cast
it
to
json
array
and
then
the
same
for
the
property
name,
the
string
based
property
name
below
it,
so
that
was
there
before.
B
However,
we
added
these
get
value
methods
down
below
which
are
similar
in
concept
to
the
json
array
and
json
object,
quick
ways
to
get
a
node
out,
and
then
we
also
added.
Then
this
git
value
I
take
a
bounce
from
between
two
and
get
value
for
terminology,
but
in
general
there
there's
this
pattern
here,
that's
not
completely
obvious
and
it's
there's
three
different
methods,
not
counting
overloads
on
git
value
that
allow
you
from
the
base
class
json
node
to
quickly
navigate.
B
You
know
down
a
deep
tree
to
the
node
you
want,
and
this
is
based
upon
feedback
from
azure
sdk
team
and
it's
also
consistent
with
newtonsoft
and
and
the
alternative,
for
example,
would
be
to
have
json
node
directly
implement.
You
know
I
dictionary
and
I
list
like
the
videos
array
and
json
object
implement.
So
so
it's
not
quite
obvious,
but
I
want
to
call
that
out
that
it's
a
pattern
that
prevents
a
bunch
of
casts
from
occurring-
and
that
is
explained
a
little
bit
later
on
as
well
in
the
dark.
E
Quick
question:
your
method
get
value.
That
is
a
job
to.
C
B
Sure
that's
a
typo.
I
don't
know
why,
for
the
other
ones
above
it
for
the
json
range
json
object.
Of
course,
you're
asking
for
a
specific
node
in
this
particular
case,
you'd
have
to
call
git
value
twice
so
yeah
yep,
that
is
the
type.
E
B
E
If
the,
if
the
value
doesn't
exist
and
it's
a
struct,
you
return
the
value,
zero
extract.
B
So
the
the
nullable
semantics
are
talked
about
a
little
later,
but
in
summary,
or
at
the
highest
level,
we
we
have
to
make
a
decision
and
on
whether
to
return
null
or
return
a
singleton
that
represents
null.
You
know,
jason
null
or
something,
and
this
design,
including
a
month
ago,
whenever
we
reviewed
it
last
assumes
null
cl
or
null
semantics.
B
E
B
Distracts
you're
going
to
get
an
exception,
otherwise
you're
going
to
get
a
no.
If
it's
a
if
it's
not
a
nullable
of
t.
Yes,
you
I
mean
you
can't
assign
a
null
to
an
int.
I
mean
there's
a
concept
of
default
values
and
stuff,
but
that
hasn't
been.
I
mean
you
treat
knowledge
of
default
values.
B
C
A
A
A
A
B
With
the
the
serializer
right
jason
element,
json
document,
our
jason
element
today
returns
a
single
10
for
null
and
then
the
serializer
of
course
has
to
return
null
because
you
know
they're
using
clr
semantics.
So
for
json,
known
since
kind
of
error
on
the
side
of
the
serializer
people
expect
clr
semantics.
Not
you
know,
I
guess
value
semantics.
E
Oh,
I
I
don't.
I
don't
I'm
not
concerned
about
it
returning
now.
What
I'm
concerned
about
is
sometimes
returning
null
and
sometimes
throwing
for
some
for
conditions
that
seem
to
be
the
same.
B
I
mean
I
would
expect
that
I
I
don't
know
I
mean,
for
example,
I
don't
think
we
want
to
return
integer
of
zero
when
you
see
a
null
in
the
database.
Some
people
have
asked
for
that
for
the
serializer
and
I'm
not
even
sure
where
we
landed
on
that
for
default
values,
but
we
I
I
didn't
factor
any
of
that
into
here.
You
know
we
can
always
in
theory,
add
that
later
as
an
option.
E
Nice,
if
you
know
type
parameter,
question
mark
meant
the
reference
type
or
nullable
of
value
type.
But
that's
not
how
the
question
mark
works
because.
C
E
A
B
E
B
When
in
doubt,
if
they're
not
sure,
if
something
is
notable,
they
should
just
you
know,
use
noble
billy
types,
I
mean
use
a
noble
teeth:
okay,
I'll
keep
going
here.
What
else
parent
and
node
properties?
I
think
those
were
there
before-
are
parent
and
root
the
path
property?
B
I
don't
think
was
there
last
time
it
was
added,
it's
very
important,
I
think
for
debugging.
Primarily
it
is
a
little
tricky
in
a
way
because
it
has
to
adjust
to
changes
in
the
graph.
So
it's
not
calculated
up
front.
It
needs
to
be
calculated
at
run
time,
because
things
can
change.
I
mean
you
can
move
elements
around,
etc.
An
array.
B
A
B
B
C
B
State
that
somewhere
there
that
we
basically
called
two
string,
I
think
which
will
probably
have
a
path
in
a
in.
C
D
B
Okay,
so
here's
the
new
wrappers
I
added
this
and
the
naming
I'll.
Just
let
you
go
through
it,
but
it's
basically
a
combination
of
some
deserialization
and
some
serialization
methods
that
I
believe
are
all
optional,
because
you
can
do
this
we're
using
the
existing
json
serializer
methods.
If
you
find
the
right
one.
E
B
Yeah,
I
do
that's
a
good
question.
I
do
call
out
some
of
the
rules.
I
guess
for
forget
value
and-
and
you
know
what
it
does,
because,
for
example,
if
you
call
a
good
value
in
the
in
the
t
that
you
passed
in
matches
the
t
on
these
adjacent
values
of
t,
then
it
returns
a
draw
value.
If
you
have
adjacent
elements,
is
there
another
optimization
if
you're
based
on
json
element
and
then
finally
it
uses
a
serializer.
B
So
I
think
the
d
serialize
just
boom
go
right
to
the
serializer
and
doesn't
have
the
optimizations,
but
they
could
be
combined.
I
could
try
to
flush
that
out
with
someone.
E
So
one
thing
it
was
about
combining
and
second
thing
is:
I
wonder
if
that
the
serialized
method
or
any
method
that
may
be
serializing
shouldn't,
take
the
serialization
options,
because
I
can
totally
see
how
people
would.
B
Yeah,
I
do
talk
about
the
options
later
and
I
and
it
does
say
that
the
options
are
only
available
when
you
either
when
you
call
these
parse
methods
or
when
you
knew
up
a
new
node
in
theory.
You
could
also
add
them
to
these
serialize.
But
if
you,
if
we
needed
to
otherwise
you,
I
guess
you
can
always
use
it
using
serializer
methods.
A
A
B
It's
it
could
be
redundant
to
put
it
on
on
the
serialize,
because
you
know
you
had
to
create
an
object
in
order
to
serialize
it.
E
B
Right
yeah,
I
I
do
have
that
section
down
below
that
talks
about
this.
I
recently
added
it
based
upon
feedback,
but
there
are
some
rules
that
have
to
be
defined
around
the
options,
because
it's
not
obvious
at
all.
For
example,
you
could
you
could
new
up
one
object
with
one
set
of
options
and
then
add
another
object
to
that.
That
has
the
different
options.
B
You
know
what
does
it
use
and
then
also
in
your
case,
if
you
wanted
to
serialize
with
a
different
set
of
options,
you
could
fall
back
to
the
json
serializer,
dot
serialize
and
pass
in
the
options
instance
and
since
you're
passing
an
explicit
option.
Instance,
it
would
override
any
options
that
the
node
had
internally.
B
A
Yeah,
maybe
it's
just
me
but
like
I
feel
like
I
would
separate
these
out.
I
would
basically
say
logically,
when
you
call
pars,
we
use
the
options
to
parse,
but
then
the
resulting
dom
has
no
notion
of
options
anymore.
If
you
want
to
deserialize,
then
you
have
to
pass
and
options
that
are
relevant
for
that
dcis
operation.
A
That
probably
doesn't
quite
work
because
you're
lazily
parsing,
probably
in
which
case
you
need
some
sort
of
ambient
options
to
do
this
basically
parsing
thing,
but
I
think
the
the
internal
options
that
you
get
from
parsing.
I
think
we
should
probably
not
leak,
and
we
should
just
say
those
are
the
options
that
are
used
for
parts
and
then,
if
you
want
to
deserialize
the
dom
at
any.
H
C
A
E
A
E
So
that
the
type
the
generic
type
argument
to
either
get
value
or
serialize
is
the
user
code,
we
don't
know
what
type
they
have
they
can
have
any
type,
and
therefore
we
don't
know
what
options
to
apply
when
we
parse
the
payload
that
we
get
from
from
azure.
Therefore,
we
literally
cannot
apply
anything.
We
basically
just
say:
hey
here's,
some
json,
that
we
got.
You
know
parse
it
with
the
default
parsing
and
the
dom
out
of
it.
Well
now
the
user
wants
to
deserialize
the
payload
to
a
strong
type.
A
Right,
but
I
think
that
I
guess
that's
kind
of
my
point
is
that,
like
I
think
so,
I
don't
know
exactly
what
we
all
store
until
other
options,
but
there's
a
bunch
of
stuff
that
is
relevant
for
parsing
and
then
there's
some
sort
of
actually
relevant
for
serialization
right.
So
you
could
say
yeah
in
your
case.
A
You
have
what
is
the
generic
options
because
for
use
just
use
the
data
right
and
then
basically
you
just
return
the
json
node
from
your
apis
and
then,
if
the
user
wants
to
deserialize
yeah,
they
have
to
pass
in
options
right
because
they
they
are
the
ones
who
own
the
options
they
know
which
converters
to
apply.
They
know
everything
right
and
that's
what
I'm
saying
to
me.
I
would
say
if,
if
parsing
needs
options,
that's
fine
in
it
of
itself.
A
I
would
just
not
expose
them
anywhere,
so
I
would
say
if
you
need
to
deserialize,
you
always
have
to
pass
in
options
because
they're
just
separate
operations
like
it
seems
weird
to
me
to
say.
If
you
caught
parts
or
you
passed
in
some
options
in
the
constructor,
then
you
can
defile
that
with
some
ambient
options,
but
that
now
makes
it
really
fragile
and
also
your
scenario
doesn't
work
because,
as
you
said,
you
don't
even
know
which
options
to
instantiate
this
zone
with
right.
A
So
it
seems
like
the
only
place
where
these
options
are
used
is
if
somebody
close
to
zero
lights,
you
should
you
should
just
pass
them
in,
like
this
notion
of
ambient
options
seems
broken
to
me.
I
guess
guess
what
I'm
trying
to
get
at.
I
just
feel
like
for
parking,
because
you
do
it
lazily,
you
kind
of
have
to
probably
store
them.
If
you
need
them
for
parsing
itself,.
E
B
I
mean
yeah,
so
there's
two
two
things.
I
guess
one
one
is
what
emma
said
that
yeah
having
the
ambient
options
hanging
around
after
you
call
parts
or
you
know
some
deserialized
method-
probably
isn't
the
best
thing
in
the
world.
So
there
is
a
json
serializer
options
property
on
here
somewhere.
So
we
would
remove
that,
for
example,
and
it'll
just
be
private
and
that
would
be
used.
For
example,
let's
say
you
knew
up
a
parent
node
an
object
or
something
like
that.
B
H
B
G
B
When
you
deserialize
other
other
things
that
you
can't
pass
the
options
in
so
yeah,
so
we
could
add
the
options
instance
then,
to
the
serialize
methods.
Here,
however,
like
I
mentioned
earlier,
you
still
could
use
the
json
serializer
the
existing
methods
outside
of
this
design
and
pass
the
options
in,
and
that
would
be
that.
E
How
would
you
do
it?
I
didn't
understand
it.
So
let's
say
I
want
to
call
get
value
or
deserialize,
and
I
realized
that
I
cannot
pass
option.
What
what
do
I
do?
Instead,
how
do
you
see
the
election.
B
I
mean
first
of
all
we
can.
We
should
probably
just
change
the
api
to
allow
you
to
pass
it
in
directly
here,
but
assuming
you
we,
we
didn't,
you
could
call
jsonserializer.serialize,
which
has
an
optional
parameter
for
the
json
serializer
options
and
specified
that
way.
No.
B
And
in
the
case,
where
you
have
a
string
or
utf
8,
bytes
you'd
pass
that.
E
How
would
where
would
I
get
because,
basically,
I'm
walking
the
dom
and
I
got
to
some
subtree-
I
I
now
hold
json
node.
That
represents
the
subtree
and
I
would
want
to
just
call
the
serialize
but
there's
no
options,
let's
assume
on
this
file,
so
I
have
to
use
serializer.
But
how
do
I
get
the
payloads
to
pass
to
the
deserializer
to
deserialize
because
I
just
hold
json
node?
B
Right
so
yeah,
so
I
think
you're
right
that
you
would
have
to
if,
if
you
had
an
object
and
you
wanted
to
or
if
you
have
a
node
and
you
want
to
deserialize
that
as
an
object
yeah,
you
would
have
to
get
the
raw.
B
B
Well,
you
can
serialize
it
as
as
utf-8
bytes
on
this
method.
No
there's
two
json
string,
there's
not
a
two
utf-8
bytes
here
I
mean
I
have
a
comment
in
here
that
we
could
add
that,
but
you
can
always
use
the
json
serializer.
Okay,
that's
kind
of
where
this
is
somewhat
confusing.
Json
serializer
has
a
ton
of
methods,
and
not
all
of
them
are
on
here.
For
example,
there's
no
stream
based
methods
on
here
and
we
could
duplicate
all
of
those
methods.
We
would
also
have
to
then
duplicate
it.
H
B
B
A
B
Well,
for
the
d
sterilized
and
for
the
yeah
good
value
you
mean
yep
yep
we
could
combine.
We
could
combine
that
deserialize
it's
it's
kind
of,
like
I
mentioned
that
the
git
value,
as
I
explained
that,
like
the
very
first
code
example,
tries
to
do
some
optimizations
around
json
element
like
it
knows,
hey
when
you
do
serialize
internally,
it's
adjacent
element,
I'm
not
gonna,
take
that
json
element
and
serializes
as
a
string,
and
then
you
know
parse
it
back
again
or
whatever
something
goofy
right.
It.
H
B
A
I
mean
I
mean
if
we
combine
them,
I
would
probably
settle
on
get
value
rather
than
d0
lines,
because
it
seems
weird
to
call
these
your
lights
for
strings
or
ins,
but
at
the
same
time,
if
you
actually
pass
strings
or
ins,
it
would
also
be
weird
having
two
pause
and
options,
because
if
you
know
you're
standing
on
a
number
like,
you
only
want
to
get
the
number.
So
what
options
would
you
possibly
need
for
that?
A
So
I
think
if
we
combine
them,
we
would
probably
make
the
options
nullable
or
you
know
optional,
for
like
a
better
term
because
for
primitives
I
don't
think
they
make
sense,
but
it
will
only
make
sense
when
you
have
custom
custom,
struct
or
custom
types.
E
A
E
Strings
mean
you
know,
the
the
get
value
method
or
the
combined
get
value
to
serialize
on
binary
data
is
called
two
objects
from
json.
I
don't
think
we
need
to
say
from
json,
but
one
thing
to
consider
is:
it
could
be
called
two
objects
of
t.
A
D
B
Yeah,
I
don't
know,
I
think,
good
value.
My
opinion
is
sufficient.
H
I
have
a
quick
question
about
the
lack
of
overriding
tostring,
so
I
remember
in
reading
one
of
the
specs
there
was
some
question.
I
think
that
the
stated
reason
for
not
doing
that
was
sort
of
performance
because
it
could
be
very
expensive
to
have
to
go
materialize.
H
The
whole
json
document,
one
thing
that
we
found
in
our
user
study
when
we
were
testing
the
azure
sdk
kind
of
prototype
of
this
thing
was
that
people
liked
to
use
what
you
would
call
json
node
in
string
interpolations
a
lot
like
they
would
make
some
rest
api
call
get
some
value
back
about
like
the
sentiment
of
a
document
and
then
want
to
put
that
somewhere
and
often
they
would
try
to
compose
that
with
a
string
using
the
the
string,
interpolation
syntax,
and
so
we
actually
ended
up
overwriting
to
string
and
copying
the
same
behavior
as
json
document
where,
if
the
underlying
value
is
a
string,
it's
returned
without
its
quotes.
H
Otherwise
for
complex
objects.
We
would
just
json
dc
or
adjacent
serialize
and
give
that
back,
and
I'm
I'm
wondering
if,
if,
if
you
think
that
there
is
value
in
doing
that,
because
it
does
make
it
more
pleasant
to
interact
with
for
for
string
interpolation
or
you
think
that
people
will
discover
like
either
calling
get
value
of
string
or
the
explicit
cast
down
to
string
when
they
want
to
start
using
this
thing
and
sort
of
put
it
in
logs
or
displaying
or
whatever.
A
A
So
we'll
probably
still
have
a
right
method
or
two
json
string
or
something
like
that.
But
but
I
would
agree
with
you
that
if
you
just
throw
the
object
into
console.writeline
or
into
string
interpolation,
it
would
be
nice
if
the
return
value
is
actually.
You
know
somewhat
sensible
and
not
just
the
type
name
right.
H
Yeah
yeah,
and
so
in
our
prototype.
We
did
have
those
methods
on
our
analog
of
json
node
to
like
do
a
string
like
get
which
would
get
string
and
then
we
also
add
cast
down
to
string,
and
then
we
also
had
the
to
to
jason
string
method,
because
there
is
a
for
us.
It
behaves
differently.
H
If
the
document
is
a
string
to
jason
string
would
return
the
string
with
quotes
wrapped
around
it,
because
that's
what
the
json
document
needs
to
look
like,
whereas
r2
string
method
would
return
the
string
without
the
quotes
around
it,
because
often
when
tostring
gets
called,
you
probably
didn't
want
those
quotes
around
anyway.
It's
just
much
nicer
when
you're,
interpolating
and
stringing
stuff
so
yeah
by
that.
E
A
Yeah,
no,
I
get
that
like
it's.
Basically,
when
you
yeah
when
you're
in
a
simple
way
that
is
of
string,
you
omit
the
quotes
which
again,
it
seems
reasonable
right,
because
tostring
is
designed
to
just
look
nice
right
and
be
sensible.
E
Speaking
of
which
this
type
needs
a
lot
of
debugger
viewer
viewers
and
viewer
work,
one
thing
that
we
we
saw
in
the
usability
study
is
kind
of
users,
try
to
compose
json
using
the
mutating
apis
and
they
want
to
always
see
kind
of
you
know,
step
through
the
debugger
and
see
the
results,
and
if
you
just
try
it,
you
will
see
how
it
doesn't
work
super
well
today,
and
it's
not
just
you
know
you
you
currently
probably
don't
yet
have
the
debugger
viewers,
but
even
the
debugger
itself.
E
A
H
Yeah
we
ended
up
having
to
to
point
people
essentially
to
that
we
we
basically
ended
up
telling
them
hey,
set
a
watch
so
that
to
jason
string
like
just
set
a
watch
on,
you
know,
value.json
string,
and
then
you
can
get
the
magnifying
glass
and
do
the
json
view.
H
I
think
at
the
time
like
that,
behavior
the
debugger
wouldn't
show
that
hourglass,
if
when
it
was
just
showing
the
like
two-string
representation
of
the
type,
so
you
had
to
actually
like
invoke
a
method
or
get
a
property
whose
return
value
was
string,
not
some
type
who's
like
when
you
call
to
string.
It
was
a
string,
you
wouldn't
see
the
hourglass
or
the
the
magnifying
glass
then
so,
there's
probably.
H
H
G
I
also
think
that
the
visualization
features
for
the
debugger
are
less
well
known.
Maybe
it's
worth
doing
a
blog
post
on
those
I'm
not
volunteering,
though.
B
You
display
attribute
and
then
yeah
for
the
bugger
display
attribute,
I
think
primarily,
but
I'm
too
jason's.
Our
two-string
of
course
has
returned
the
whole
thing,
but.
A
B
Okay?
So
I'm
hearing
that
we
add
two
string
with
a
special
handling
for
string
and
then
debugger
display
attribute,
which
will
at
least
show
the
same
as
two
string.
E
For
us,
the
most
useful
thing
would
be
if
the
debugger
was
showing
the
payload
that
will
be
sent
over
the
wire.
If
people
use
this
to
to
compose
json-
and
you
know
pass
to
to
the
azure
sdk,
which
gets
me
to
the
next
question,
how
do
we
let's
say
somebody
passes
us
one
of
those
value?
E
B
Yeah
that
was
well
actually,
someone
else
asked
for
feedback
on
adding
the
right
methods
to
a
stream,
and
my
comment
on
that
was:
we
could
do
that.
We
have
to
add
four
overloads
at
least
four
overloads
one
for
each
of
the
four
types
here
and
then
actually
I
take
that
back.
This
is
that's
not
a.
It
doesn't
return
anything
right
to.
We
just
have
to
add
one
overload,
but
we
we
don't
have.
We
don't
have
a
way
today
to
write
a
string
I
mean
in
in
the
you
know:
utf-8
jason
writer.
B
B
E
C
E
B
What
we
would
need
to
do,
and-
and
you
can
already
do
this
today-
using
existing
json
serializer
methods-
you
can
call
json
serializer.serialize
and
then
pass
the
stream
in
and
we
will
write
utf-8
to
that
stream.
It's
just
do
we
copy
that?
One
method,
then,
here
for
stream.
E
Yeah
again,
I
don't
understand
what
you
would
pass
to
the
serializer
because
serializer
it's
not
enough
to
call
you
know,
method
serialize
on
serializer
and
pass
the
stream.
You
also
need
to
pass
the
thing
that
you're
going
to
be
serializing.
You
pass
the
node
on
the
stream.
Oh
so
serializing
a
node
will
actually
write
yeah.
B
The
node
will
be
treated,
adjacent,
node
will
and
derived
heights
are
directly
supported
by
the
serializer.
H
B
Not
something
that
we
had
to
add
extra
code
for
that's
just
basic
well
kind
of,
but
it
falls
into
the
custom
converter
model
that
we
have.
For
example,
if
you
have
a
json
node
property
and
you
on
a
poco
that'll
work,
you
don't
have
to
you
know,
have.
H
E
C
So
so
two
json
string
are
you
expecting
that's
going
to
be
pretty
printed
or
compact.
E
A
A
What's
that
like,
because
chris
have
insisted
that
it's
exactly
what's
being
written,
I'm
saying
like?
Is
there
any
reason
why
the
debugger
display
couldn't
do
the
same
thing
as
tostring,
but
we
have
the
special
handling
for
simple
string
values
because
it
doesn't
seem
like
when
you
have
a
simple
string,
radius
you're
very
likely
to
call
right
two.
So
I
don't
think
he
would
actually
observe
the
difference.
E
E
B
Bugger
debugger
display
attribute.
We
can
definitely
iterate
on
that,
and
I
I
do
think,
however,
that
the
path,
property
or
path
method
is
also
useful
there.
I'm
not
sure
if
that
would
you
know
if
you
display
two
things
there,
how
that
messes
up
any
kind
of
visualizers
you
might
have
if
you
can
have
a
visualizer
for
debugger
display
or
if
it's
only
the
the
two
string,
but
I
do
think
the
path
property
is
important,
for
you
know
many
scenarios,
because
you
might
be.
B
D
B
You
might
have
a
watch
on
them
on
an
object
but
yeah
as
you're
navigating
down.
That
part
is
obviously,
if
that's
what
you
mean,
I
mean
because
you
have
to
navigate.
You
know
to
a
particular
node
and
then,
of
course,
the
json
path
is
fairly
obvious.
You
might
not
know
the
string
name
of
a
property
in
the
debugger,
but
at
least
you
understand,
the
the
levels
are
the
hierarchy.
B
B
Let's,
I
think
we
should
table
the
debugger
display
because,
like
christoph
said,
is
a
lot
based
upon
usability
and-
and
I
think
we
could-
we
should
get
feedback
on
that
before
we
beat
it
to
death
here.
A
B
A
B
For
the
accordion
one,
that's
that's
might
be
kind
of
a
large
feature.
I
mean
we
don't
do
that
anywhere
else.
A
Yeah,
I
mean-
maybe
that's
also.
Okay,
like
I
care,
I
guess
more
about
the
text
writer,
because
that's
the
most
common
type
for
you
know
concatenating
strings.
Basically
right
because
that's
I
mean
you
can
argue
as
a
string
builder
but
realistically,
like
the
abstraction
that
you
pass
around.
Is
a
text
writer?
No,
that's
not
a
string
builder
but,
like
you
know,
if
you
just
want
to
basically
build
a
dom
in
memory
and
just
have
it
render
nice
somewhere,
like
I
don't
know,
text
why
that
seems
like
the
most
handy
abstraction
for
that
stream.
A
D
B
What
about
the
the
parse
methods?
I
mean
one
of
the
feedback
I
had
somebody.
I
actually
asked
for
a
parse
method
and
that's
where
I
said
well,
if
we
add
a
stream
based
parse
method
or
read
from
or
whatever
we
end
up
calling
it,
we
have
to
duplicate
it
four
times,
perhaps
depending
upon
you
know
what
type
you
expect
back
and
to
avoid
cast.
B
What
are
the
four
times?
Well,
the
parse
method,
for
example,
exists
on
json,
node,
json
value,
json,
object
and
json
array.
It
doesn't
have
to
exist
on
the
other.
You
know
it
on
the
three
types
it
could
just
exist
in
json
node,
but
then
that
requires
an
explicit
cast
by
the
user
and
if
they
already
know
what
node
they
want,
you
know
they
could
just
call
jsonobject.parse,
for
example,.
C
E
E
Therefore,
it
seems
to
me,
like
just
parse
method
on
json
node
would
be
enough
to
me
the
main
kind
of
complication
of
using
streams.
But
I
I
having
said
that,
I
I
still
think
that
the
complication
is
worth
it,
but
the
main
complication
is
that
suddenly
you
need
sync
and
they
think
of
apis,
I
think-
or
maybe
even
just
they
think
I
don't
know
this
whole
thing
about
synchronizing
and
streams
is
usually
the
most
complicated
part
of
similar
designs
that
we've
done.
A
B
B
Don't
support
async,
that's
right!
The
serializer
supports
it.
Okay,
if
you,
if
you'd,
call
the
d
serialize
and
see
serialized
methods
on
the
serializer,
it
has
an
awesome
infrastructure
to
ask
for
data
as
it
needs
it
and
write
data
as
it
needs
it,
but
internally
the
reader
and
writer
and
document
and
element.
None
of
those
truly
support.
Async
document
has
a
a
way
I
think,
to
take
a
stream,
for
example,
but
it
drains
it
up
front.
C
I
mean
the
the
yes,
I
guess
parse
from
the
reader
yeah.
The
reader
is
asynchronous
yeah,
the
json
document
parse
async,
is
it
asynchronously
pre-drains
the
stream
yeah.
E
C
I
think
it
always
supports,
like
it
supports
complicated
things,
but
not
stream,
but
it
it
doesn't
require
completion.
So
I
think
you
can
drain
off
the
data
and
keep
going,
but
that
could
be
remembering
and.
C
B
By
getting
the
raw
data
out,
you
can
get
the
problem,
utf-8
json
data
or
whatever
it's
called
get.
H
B
Out
and
then
pass
it
around
as
a
struct
and
then
new
up
a
new
reader
later
and
invoke
it,
but
but
utf-8
jason
reader
is
actually
a
refstract,
so
you
can't
even
reference
it
within
the
namesync
method.
You
have
to
do
that
better.
E
B
Okay,
we
have
about
a
half
an
hour
left
if
we
want
to
keep
going,
it
does
have
stream
who
knew
want
to
scroll
down
emma.
C
Yeah
so
levi
pointed
out
in
chat,
you
know
that
basically
write
two
that
takes
a
stream.
Can
it
can
be
utf-8
if
we
want
it
to
without
taking
the
optional
encoding.
On
the
one
hand,
I
think
it's
a
little
weird.
On
the
other
hand,
you
know
utf-8
is
winning
if
not
already
won,
and
it's
just
that
we're
in
a
in
a
hybrid
state,
because
we've
been
utf-16
based
for
so
long.
C
Us
something
that's
not
encoding.utf8.
B
Okay,
moving
on,
then
that
was
json
node,
there's
a
bunch
of
implicit
and
explicit
operators
who
skipped
over
those,
but
that's
okay,
json
array
represents
an
array
and
json
and
it
implements
I
list
of
json
node
in
theory.
It
doesn't
have
to
implement
I
list,
but
it's
done
here,
newton's
off
does
it
and
I
believe
it's
kind
of
expected.
B
So
that's
the
reason
for
I
list
there.
However,
some
of
the
methods
aren't
really
appropriate.
So
some
of
the
I
list
methods
are
implemented
explicitly
and
you
can
just
kind
of
go
over
those
yourselves.
So
maybe
maybe
we
want
to
remove
those
explicit
implementations
or
add
other
ones
completely
open.
I
just
kind
of
did
a
best
guess
on
that.
B
I
I
believe
this
has
to
do.
Let
me
think
about
that:
how
did
that.
D
C
E
Well,
we
need
the
behavior
to
for
users
to
be
able
to
add
objects
to
to
json
arrays
and
the
scenario
is-
or
we
we've
seen-
users
relying
on
anonymous
types.
So,
basically
in
in
code,
they
wanted
to
add.
You
know
a
small
json
object
that
has
two
properties
to
an
array
and
they
would
just
new
new.
You
know
open
curly
property,
one
equals
value
property
two
equals
some
other
value,
close
paren,
close
curly
bracket.
B
So
that,
actually,
is
the
reason
why
it
ended
up
here,
because
this
I
list
used
to
be
of,
I
lift
the
object
and
not
json
node,
and
I
forgot
to
remove
this
overload
for
some
reason.
But
if
you
have
that
scenario,
what
you
do
is
you
just
new
up
a
json
value
of
type
object
of
where
t
is
object
and
then
you
can
specify
whatever
you
want
from
the
constructor.
B
Yep
yep,
so
so
this
is
a
typo
here.
The
add
of
object
ignore
that.
C
E
E
Can
they
basically
look
at
the
json
payload
that
they
are
supposed
to
produce
and
then
they
type,
for
example,
common
case
clr
properties,
because
those
are
not
real,
you
know
types,
it's
just
like
you
know,
inline
anonymous
type,
so
they
they
basically
type
their
names
as
they
want
them
to
appear
in
the
payload.
C
H
E
A
E
Now
for
object,
serialization,
initialization
syntax!
You
need
to
have
a
type
that
represents
the
the
you
know,
the
shape.
A
B
C
Yeah,
I
mean
all
the
the
case
where
you
know
you're
taking
object
and
you're
serializing.
It
comes
back
to
my.
Is
the
user
aware
what
the
dynamic
type
that's
being
serialized
is
so
that
we
don't
end
up
with
over
sharing
of
data
so
that
it
should
sort
of
look
like
dc,
realize.
A
C
E
A
B
C
Add
of
t
t
item
then,
then
the
t
is
specified
for
you
by
generic
input
right
right,
generic
yeah
sure,
yep.
B
If
you
have,
unlike
the
constructor,
which
doesn't
support
that
right.
A
B
Yeah
and
actually
there
is,
we've
got
to
adjacent
value
later
and
there
was
a
proposal
having
a
factory
method
that
ever
did
generic
inference.
For
that
reason,.
E
By
the
way,
one
thing
that
I
promised
steve
yesterday
and
I
still
plan
to
do
it-
is
send
you
guys
some
kind
of
common
json
payloads
that
people
want
to
send
to
azure,
and
I
think
it
would
be
good
to
write
usage
samples
that
show
how
would
user
use
these
apis
to
compose
these
jsons.
E
I
kind
of
noticed
that
I
don't
know.
Maybe
I
had
the
first
review
you
reviewed
usage
samples.
E
I
think
it's
very
important
to
write
them
for
this
api,
because
some
of
the
json
apis
that
you
know
frankly,
we
shipped-
and
I
I
partially
designed
they
kind
of
look
so
busy
in
comparison
to
what
users
want
to
write
and
what
is
possible
with
nice
api
that
supports,
for
example,
anonymous
types
that
I
think
it's
super
important
to
write,
few
usage
samples
for
those
common
scenarios
and
one
additional
node,
which
is
kind
of
when
you
look
at
the
api,
it's
very
easy
to
imagine
how
they
would
be
used
to
compose
an
object
with
bunch
of
properties,
but
in
real
life.
E
B
H
B
B
So
yeah
here's
the
abstract
class-
and
I
have
a
comment
in
here
that
says,
if
we
add
a
create
method
here,
you
won't
have
to
specify
the
t
which,
with
anonymous
types
you
pretty
much
need
to
do
that
because
you
don't
know
what
type
is
being
generated
yeah.
But
if
we
had
this
create
method
here
the
the
work
around,
then
you
basically
call
this
static
method
and
you
pass
in
your
anonymous
type
and
then
you
pass
that
into
the
existing
add
method
that
takes
a
json
node.
B
E
C
E
C
Yeah,
I
mean
the
only
thing
that
I
sort
of
wonder
with
it
is.
I
know
that
ad
is
really
the
verb
that
we
have
here,
but
does
it
should
it
be
something
like
add,
serialized
or
something
to
indicate
we're
reading
it
and
serializing
it
right
now
we're
not
holding
a
loose
reference
to
your
object
and
we
won't
see
further
mutations.
E
C
Well
in
but
in
javascript
you
do
have
a
a
reference
that
is
held
there,
and
if
this
is
holding
the
reference,
then
we
can
do
add,
and
then
that
becomes
the
behavior
for
all
time,
like
once
you're
allowing
a
a
modification
of
the
object
after
the
call
to
add
to
show
up
in
the
graph.
That's
that's
now
the
behavior.
Maybe
I
misunderstood.
E
E
A
B
B
C
B
Well-
and
you
know
what
we
could
argue,
we
could
go
down
that
path
of
saying
we
should
do
that,
but
in
a
lot
of
cases
it's
not
necessary
because
during
serialization
of
course
it's
going
to
write
it
out,
as
you
would
expect,
it's
only
necessary
if
you
want
the
in-memory
dom
to
be
perfect
right,
have
all
the
notes
expanded
and
you
can
look
at
each
one
and
and
say
hey
this.
You
know
it's
no
longer
a
poco
instance
or
whatever
no
longer
a
customer
poco.
B
C
B
Yeah
yeah,
I
do.
I
do
call
that
out
somewhere
in
the
design
here
that
it's
like,
I
said,
it's
kind
of
a
trade-off.
It's
like.
If
we
want
to
take
the
hit
to
desertalize
everything
and
to
have
your
perfect
memory
dom
we
could
do
that.
We
could
make
it
an
option
right,
we
could
say:
hey,
you
actually
want
to
do
a
de-serialized
which
you
could
actually
anyway.
I
like.
B
I
said
I
it's
more
of
a
performance
thing,
because
we
just
allow
you
to
assign
anything
you
want,
even
if
it's
an
object
or
an
array.
Normally
you
use
adjacent
object
or
json
right
to
do
that,
because
you
don't
have
an
existing
poco
type.
But
if
you
do
our
existing
array,
but
if
you
do
have
an
existing
poco,
our
collection
hanging
around
and
you
just
want
to
serialize
it-
you
can.
B
We
do
have
to
support
that.
I
think
in
general
for
our
the
assignment
portion
of
it
in
general
because
of
things
like
dynamic
but
yeah.
If
we
want
to
auto
convert,
that's
not
done
today.
If
we
want
to
auto
populate
a
json
object
in
json
array
based
upon
a
clr
typing
passed
in
it's
not
done
today,
we
could
make,
we
could
do
it,
but
I
think
it
should
be
perhaps
an
option.
A
A
H
A
A
Yeah
the
two
strings,
yeah
yeah,
two
string
will
always
be
the
same,
but
the
the
dom
structure
is
different.
I
mean
I'm
wondering
whether
we
can
just
do
the
the
lazy
thing
differently
and
saying.
If
you
give
us
a
t,
you
know
unless
it's
a
primitive,
we
always
make
a
json
object
out
of
it,
because
well
that's
what
it
is.
A
And
then
you
know,
if
you
ask
that
for
children,
then
we
will,
you
know
implicitly
desiralize
already,
because
then
you
can
treat
the
dom
as
the
same
right
and
so
people
just
assign
stuff,
and
they
just
you,
know,
visualize
it
later.
We
don't.
You
know,
pay
for
the
instantiation
of
all
these
object
graph
elements,
but
at
least
the
complexity
is
out.
H
C
Serializes
at
the
call
to
add,
then
you
can
make
sense
out
of
all
of
that
and
you
can
build
the
tree
and
if
it's
holding
a
weak
reference
then
like.
Maybe
it
just
means
that
we
need
another
type
to
indicate
that
there's
a
deferred
serialization
going
on
here
like
and
maybe
json
value
of
t.
Does
that
because
it's
it's
either
one
of
the
built-in
values
that
is
being
deferred
serialized
into
the
obvious
thing
or
it's
a
deferred
serialization
of
a
thing.
So
it
could
be
that
we
already
have
the
right.
B
C
Yeah,
you
mentioned
the
the
perf
advantage
of
delaying
the
serialization,
but
in
if
you're
in
the
debugger,
it's
actually
going
to
be
worse
to
do
delay.
Because
every
time
that
you
hit
this
debugger
display
you're
going
to
dynamically
serialize
the
object.
Then
you
hit
f10
you're
going
to
dynamically
serialize
it
again
because
you're
not
saving
any
of
these
values,
and
we
really
don't
want
f10
to
modify
your
tree
because
woah
is
a
bug.
C
A
Yeah,
I
think,
for
the
debugger.
It
probably
doesn't
matter
right,
like
I
mean
you're,
not
calling
this
in
a
tight
loop
in
the
debugger
anyway,
because
then
everything
is
slow.
So
I
think
the
debugger
scenario
I
can.
I
can
buy
that
we
pay
in
overhead,
but
I
also
by
the
scenario
that
in
the
most
common
cases
where
people
basically
compound
the
dom,
it
makes
sense
to
defer
the
digitalization.
It's
just
it's
slightly
unfortunate
that
it's
not
an
implementation
detail
right.
It
basically
leaks
into
the
way
you
use
the
dom.
B
C
Like
it,
it
does
lose
in
a
little
bit
of
purity
to
me,
but
but
I
I
expect
that
most
people
are
using
the
trees
as
either
I
loaded
a
thing
and
I'm
modifying
it.
So.
H
B
B
Yep,
that's
that's
a
good
question.
I
right
now
the
that
value
kind
is
informational.
It's
not
really
used
by
any
of
the
json
node
stuff
it
during
decentralization
will
respect
what
you
know.
The
json
element
had,
but
really
it's
informational,
so
nothing
it.
Ultimately,
I
think,
for
example,
when
we
it
might
be
used.
B
If
we
want
to
support
something
like
comments,
xml
comments
which
are
not
supported,
then
you
would
set
json
kind.
I
think,
to
comments,
but
still
you
know,
assign
a
string
and
then
it
would
be
used,
but
right
now
it
does
nothing.
I
I
at
least
I
haven't
documented
it
anyway.
I
haven't
wrote
the
xml
doc
for
this,
but
I
imagine
it
would
not
do
anything
I
mean
unless
we
call
it
all,
then
it.
B
It
it's
it's,
not
it's
not
really
needed.
If
people
are
curious,
I
mean
it
should
be
obvious
what
what
the
jason
node
type
our
kind
is,
and
if
we
want
to
support
xml
comments,
there
might
be
other
ways
to
specify
that
said.
You
know
this
given
node
is
a
comment
and
not
a
a
string.
A
B
C
C
B
Custom
converters
can
be
specified,
you
can
have
adjacent
value
kind,
might
be
anything
right.
You
can
write
an
integer
out
as
an
object
if
you
want.
So
that's
why
I
say
this
yeah.
Perhaps
what
we
could
just
yeah
remove
the
adjacent
value
kind
argument
from
this
constructor
then.
C
C
C
You
know
doing
his
checks
is
the
way
to
go,
but
if
you've
loaded
the
thing
and
you're
looking
for
go,
find
me,
the
arrays,
then
reading
of
an
enum
is
faster.
A
C
Mean
unspecified
would
only
really
apply
to
adjacent
value
types
if
you've
got
it
from
a
dc
realize
that
that
wouldn't
apply.
B
Okay,
we're
hey
we're
running
short
on
time
here,
seven
minutes!
This
is
jason's
value
jason.
Can
you
scroll
up
a
little
bit
just
to
make
sure
we
hit
hit
everything,
I'm
not
sure
what
we
missed
yeah.
B
Missed
anything
then
jason
object
implements.
I
I
dictionary
similar
to
jason
array
and
there's.
C
C
And
we
think
again,
this
is
just
based
on
you
know,
having
learned
from
jason
element
that
it
surprises
people.
Do
we
really
think
that
the
them
being
on
the
node
people
find
more
useful
than
they
find
confusing,
because
with
json
element
we
basically
learned
they
find
it
confusing?
B
C
B
Yeah,
can
you
find
the
section
that
talks
about
that?
Let
me
see.
Let
me
pull
it
up
locally
here
again,
because
I
have
some
code
examples
of.
C
Like
I
can
believe
that
we
think
that
these
two
things
are
more
generally
useful
on
the
base
class,
and
but
I
know
that
I've
heard
a
lot
of
grief
since
we
had
a
json
element
of
okay.
The
index
is
here,
but
it
doesn't
work
and
why?
How
was
I
supposed
to
know
that
it's
like?
Well,
it's
a
complicated
union
type.
You
have
to
ask
it
what
kind
of
thing
it
is.
Okay,
my
doc
is
on.
A
A
B
Search
for
adding.
B
B
Another
one
trying
to
try
the
next
hit
three,
it
should
say
adding
json,
node,
indexers
or
search
for
index
or
maybe
sorry
just
search
for
indexer
or
indexers
plural.
Oh
here
we
go.
A
B
So
this
just
shows
an
example
and
actually
the
feedback
here
came
from
the
azure
sdk
team,
because
they
do
you
know
they
have
a
single
single
type,
but
here's
an
example
of
having
to
cast
and
find
the
right
types
in
order
to.
C
I'm
just
surprised.
Like
again,
my
my
feeling,
based
on
jason
element,
is
that
it's
one
of
the
things
that
people
hate
about
it
that
that
it
has
these
members
that
are
in
your
face
that
you
can't
use.
C
H
B
B
Assistant
only
so
here
it
won't
automatically
add.
A
B
I
I
I
oh
good
point
it
should.
If
this
I
I
I
put
the
new
jason
object
there,
I
shouldn't
have
did
that.
This
is
just
a
an
override
scenario.
B
B
After
after
array
you
call
dot,
add
and
then
you,
you
know,
specify
something
there
and
then
you
have
another
line
that
changes
it
but
yeah.
No,
I
need
to
fix
that.
That's
good.
I
mean.
B
Is
different,
the
the
string
indexers
is:
oh
wait:
yeah,
sorry,
yep,
yep,
jeremy,
you're
right
that
this
does
do
an
ad.
I
I
was
just
thinking
that
it
just
did
the
raw
zero
there,
which
would
thrill,
but
in
this
particular
case
it
does
work.
It
will
call
add
just
like
the
dictionary
indexer.
E
Does
already,
this
is
one
of
those
scenarios
that
we
should
write
a
real
code
sample
and
make
sure
that
it
works
and
it
it
does
what
users
expect,
because
one
of
those
usability
problems
that
we
observed
is
that
people
didn't
know
how
to
create.
Basically,
a
very
common
scenario:
is
you
have
an
object?
E
It
has
a
property
and
the
value
of
a
property
is
an
array,
and
now
the
users
didn't
know
how
to
create
an
empty
array,
so
they
can
keep
adding
to
it
and
they
thought
they
need
to
specify
size
of
the
array,
because
array
in.net
is
something
that
has
a
fixed
size.
So
when
you
instantiate
it,
you
have
to
specify
the
size.
E
Well
in
json
array
is
not
really
a
fixed
size
thing,
you
can
kind
of
keep
adding
to
it.
So
that
was
very
confusing
and
then
I
think
your
api
is
slightly
better
actually
than
what
we
had,
because
you
have
a
type
that
represents
array
we
didn't
so
in
in
our
prototype,
the
user
would
have
to
either
call
a
special
api
that
gave
you
like
a
sentinel
value
that
represents,
you,
know
an
empty
array
or
an
array,
or
they
would
have
to
use
like
object
array
which
was
not
super
intuitive.
C
E
This
is
just
you
know,
the
tip
of
the
the
iceberg.
There
are
so
many
of
these
kind
of
things
that
I
suspect
will
be
pro
problematic.
E
B
B
One
is
broke
like
I
mentioned,
on,
for
the
indexer
portion,
but
on
a
read
scenario.
This
would
be
fine
or
or
when
you're
resetting
an
existing
value
would
be
fine
but
yeah.
You
can't
just
automatically
say
index
of
one
and
assume
we're
going
to
call
add
I
mean
we
could
we
could
allow
that,
but
that's
a
little
goofy,
because
if
you
have
a
bunch
of
gaps
or
something
right,
I.
C
Mean
that
it
does
work
in
javascript,
where
at
least
my
recollection
of
javascript
is,
if
you
use
a
thing
that
is
implicitly
in
it
or
an
integer,
then
it
makes
an
array
and
default
sorry
it.
The
undefined
fills
everything
with
a
lower
index
and.
E
Again,
this
is
the
same
thing
we
if
we
don't
have
this
supported
people
will
not
know
what
to
do
because
they
will
first,
they
will
not
discover
that
this
method
add
because
of
the
confusion
that
I
mentioned,
the
thing
is
called
the
ray
dotnet
developers.
Don't
think
that
array
has
a
method
add,
so
they.
H
B
And
in
fy
we
don't
have
the
optimization
that
we
specify
the
the
length
of
the
array.
I
don't
think
I
added
that
to
jason
ray
so
I
I
think
azure
sdk
does
have
that.
So
that
might
be
related
to
part
of
that
confusion.
E
But
I
I
think
big
part
of
the
problem
would
not
all
problems,
because
our
usability
study
was
not
super
successful.
I
have
to
say
in
terms
of
like
we
are
not
super
happy
with
the
api,
but
I
would
recommend
that
you
try
to
make
the
indexer
as
ad
working
people
will
have
a
loop.
They
will
try
to
basically
in
the
loop,
read
some
values
from
a
store
that
they
have
as
I
mentioned,
and
then
they
have
an
indexer
of
the
thing
that
they
are
reading
and
they
want
to
use
the
same
indexer.
E
Er
exactly
what
you,
what
you're
saying
but
think
about
it.
This
way
people
see
a
type
called
array.
F
E
C
Yeah
and
like
I
think
that
it
would
make
sense,
and
I
mean
we
could
debate
whether
we
wanted
to
do
this
for
a
list
of
t
that
if
you
are
doing
sub
count
that
that
is
like.
Oh
obviously,
you
just
want
me
to
call
ad,
but
that,
if
you
did,
you
know
if
you
the
first
line,
you
did
was
array
of
one
equals
something
it's
like.
But
I
don't
know
what
to
make
zero
like.
B
C
B
A
I
mean,
I
think
you
could
say,
like
json
array
could
just
take.
You
know
an
optional
argument
of
size
right.
So
if
you
specify
that
let's
say
you
say
12,
it
just
means
you
immediately
have
not
just
capacity
12.
You
also
have
12
null
values
in
that
array
already
so
now,
when
you
actually
index
into
it,
0
to
11
are
fine
valid
indices.
If
you
say
12,
you
get
an
outer
range
because
we
don't
have
that
yet.
A
C
Yeah
I
mean
so
like
we
just
yeah
need
to
figure
out
what
the
semantics
we
want,
maybe
maybe
null
filling
the
previous
values
is
totally
fine,
but
but
yeah
anyway.
So
to
kristoff's
point
and
what
I
was
bringing
up.
Yes,
we
need
to
understand
some
samples,
so
we
can
determine
if
this
is
helpful
or
harmful
and
because
I
just
feel
that
my
recollection
is
this
is
one
of
the
things
on
jason
element
that
people
found
kind
of
infuriating.
B
C
Jason
element
can't
do
anything
because
it
has
I
mean
unless
we
we
now
went
back
in
time
with
kristoff's
thought
of
you
have
strucks
that
you
just
have
to
static
cast
to
and
all
that
they're
really
doing
is
reinterpreting
the
same
thing.
But
since
you
have
polymorphism
here
and
hierarchy,
it's
these
indexers
could
only
be
on
the
types
that
they're
available
to.
Yes,
you
have
to
do
more
casting,
but
it's
it's
not
that
you
feel
that
intellisense
is
now
lying
to
you
and
saying
something's
available
that
wasn't.
B
And-
and
I
do
think
the
example
I
have
down
below
could
be
fixed
up
a
lot
in
the
sense
that
you
could
have
like
a
dot
as
method
right,
because
the
problem
with
casts
is
that
they're
front
loaded
and
if
you
could
just
inline
everything
and
make
it
natural,
then
that
would
you
know
you
could
think
about
it
that
way,
right.
C
A
Alright,
so
I
think
I've
taken
a
lot
of
notes
now.
Let
me
find
the
pr
again
here,
which
no
means
I
need
to
click
on
this
guy
here,
which
now
will
probably
take
another
20
minutes
to
load,
yeah
I'll
post
the
comments
and
then
it
seems
like
we
need
at
least
one
more
review.
A
One
action
item
I've
recorded
is
basically
christoph
giving
us
some
some
sample
code
on
like
payloads
that
people
want
to
pass
to
the
azure
sdk,
and
then
we
can
look
at
that,
and
maybe
that's
how
we
should
start.
We
should
actually
just
as
jeremy
suggested,
just
have
samples
for
okay,
like
here's,
some
pedals,
you
want
to
construct,
so
we
probably
have
to
somehow
manufacture
that
there
will
be
a
writing
scenario.
A
We
probably
want
one
scenario
where
we
just
manipulate
something
we
or
we
already
read.
We
just
want
to
you
know
fast.
You
know
fuzz
with
it
and
then
one
pure
reading
example,
where
you
know
you
just
index
into
stuff
and
you
know,
traverse
the
tree
and
whatnot,
and
that
would
give
us
probably
a
good
read
on
how
we
like
the
api.
A
And
then,
basically,
once
it's
ready
again,
we
can
set
up
another
review
and
then
we
go
over.
That
again.