in Microsoft.Azure.Cosmos/src/Json/JsonNavigator.cs [124:274]
public virtual void WriteNode(IJsonNavigatorNode node, IJsonWriter jsonWriter)
{
JsonNodeType nodeType = this.GetNodeType(node);
switch (nodeType)
{
case JsonNodeType.Null:
jsonWriter.WriteNullValue();
return;
case JsonNodeType.False:
jsonWriter.WriteBoolValue(false);
return;
case JsonNodeType.True:
jsonWriter.WriteBoolValue(true);
return;
case JsonNodeType.Number:
if (this.TryGetUInt64Value(node, out ulong uint64Value))
{
jsonWriter.WriteNumberValue(uint64Value);
}
else
{
Number64 value = this.GetNumberValue(node);
jsonWriter.WriteNumberValue(value);
}
break;
case JsonNodeType.String:
case JsonNodeType.FieldName:
bool fieldName = nodeType == JsonNodeType.FieldName;
if (this.TryGetBufferedStringValue(node, out Utf8Memory bufferedStringValue))
{
if (fieldName)
{
jsonWriter.WriteFieldName(bufferedStringValue.Span);
}
else
{
jsonWriter.WriteStringValue(bufferedStringValue.Span);
}
}
else
{
string value = this.GetStringValue(node);
if (fieldName)
{
jsonWriter.WriteFieldName(value);
}
else
{
jsonWriter.WriteStringValue(value);
}
}
break;
case JsonNodeType.Array:
{
jsonWriter.WriteArrayStart();
foreach (IJsonNavigatorNode arrayItem in this.GetArrayItems(node))
{
this.WriteNode(arrayItem, jsonWriter);
}
jsonWriter.WriteArrayEnd();
}
break;
case JsonNodeType.Object:
{
jsonWriter.WriteObjectStart();
foreach (ObjectProperty objectProperty in this.GetObjectProperties(node))
{
this.WriteNode(objectProperty.NameNode, jsonWriter);
this.WriteNode(objectProperty.ValueNode, jsonWriter);
}
jsonWriter.WriteObjectEnd();
}
break;
case JsonNodeType.Int8:
{
sbyte value = this.GetInt8Value(node);
jsonWriter.WriteInt8Value(value);
}
break;
case JsonNodeType.Int16:
{
short value = this.GetInt16Value(node);
jsonWriter.WriteInt16Value(value);
}
break;
case JsonNodeType.Int32:
{
int value = this.GetInt32Value(node);
jsonWriter.WriteInt32Value(value);
}
break;
case JsonNodeType.Int64:
{
long value = this.GetInt64Value(node);
jsonWriter.WriteInt64Value(value);
}
break;
case JsonNodeType.UInt32:
{
uint value = this.GetUInt32Value(node);
jsonWriter.WriteUInt32Value(value);
}
break;
case JsonNodeType.Float32:
{
float value = this.GetFloat32Value(node);
jsonWriter.WriteFloat32Value(value);
}
break;
case JsonNodeType.Float64:
{
double value = this.GetFloat64Value(node);
jsonWriter.WriteFloat64Value(value);
}
break;
case JsonNodeType.Binary:
{
ReadOnlyMemory<byte> value = this.GetBinaryValue(node);
jsonWriter.WriteBinaryValue(value.Span);
}
break;
case JsonNodeType.Guid:
{
Guid value = this.GetGuidValue(node);
jsonWriter.WriteGuidValue(value);
}
break;
default:
throw new ArgumentOutOfRangeException($"Unknown {nameof(JsonNodeType)}: {nodeType}.");
}
}