in powershell/resources/runtime/csharp/json/Serialization/JsonSerializer.cs [288:340]
private JsonNode ReadValue(TypeDetails type, object value)
{
if (value == null)
{
return XNull.Instance;
}
if (type.JsonConverter != null)
{
return type.JsonConverter.ToJson(value);
}
else if (type.IsArray)
{
switch (Type.GetTypeCode(type.ElementType))
{
case TypeCode.String: return CreateArray((string[])value);
case TypeCode.UInt16: return CreateArray((ushort[])value);
case TypeCode.UInt32: return CreateArray((uint[])value);
case TypeCode.UInt64: return CreateArray((ulong[])value);
case TypeCode.Int16: return CreateArray((short[])value);
case TypeCode.Int32: return CreateArray((int[])value);
case TypeCode.Int64: return CreateArray((long[])value);
case TypeCode.Single: return CreateArray((float[])value);
case TypeCode.Double: return CreateArray((double[])value);
default: return ReadArray((IEnumerable)value);
}
}
else if (value is IEnumerable)
{
if (type.IsList && type.ElementType != null)
{
switch (Type.GetTypeCode(type.ElementType))
{
case TypeCode.String: return CreateList<string>(value);
case TypeCode.UInt16: return CreateList<ushort>(value);
case TypeCode.UInt32: return CreateList<uint>(value);
case TypeCode.UInt64: return CreateList<ulong>(value);
case TypeCode.Int16: return CreateList<short>(value);
case TypeCode.Int32: return CreateList<int>(value);
case TypeCode.Int64: return CreateList<long>(value);
case TypeCode.Single: return CreateList<float>(value);
case TypeCode.Double: return CreateList<double>(value);
}
}
return ReadArray((IEnumerable)value);
}
else
{
// Complex object
return ReadObject(value);
}
}