in src/Trinity.TSL/Trinity.TSL.CodeTemplates/Serializer.cs [97:206]
private static void ToString_impl(t_data_type value, StringBuilder str_builder, bool in_json)
{
//For top-level element, just return the literal representation.
//For non-top-level element, it would be an element in a json structure. (object, or array)
//Thus we have to escape strings, surround fields with quotes (") if necessary.
IF("$t_data_type->is_string()");
if (in_json)
{
str_builder.Append(JsonStringProcessor.escape(value));
}
else
{
str_builder.Append(value);
}
ELIF("$t_data_type->is_struct()");
{
IF("$t_data_type->is_optional()");
if (value == null)
return;
END();
str_builder.Append('{');
bool first_field = true;
FOREACH();
{
IF("$t_field_type->is_nullable() || !$t_field_type->is_value_type()");
IF("$t_data_type->is_optional()");
if (value.Value.t_field_name != null)
ELSE();
if (value.t_field_name != null)
/*END*/
{
END();
if(first_field)
first_field = false;
else
str_builder.Append(',');
str_builder.Append("\"t_field_name\":");
IF("$t_data_type->is_optional()");
ToString_impl(value.Value.t_field_name, str_builder, in_json: true);
ELSE();
ToString_impl(value.t_field_name, str_builder, in_json: true);
END();
IF("$t_field_type->is_nullable() || !$t_field_type->is_value_type()");
}
END();
}
END();
str_builder.Append('}');
}
ELIF("$t_data_type->is_value_type()");
{
IF("$t_data_type->is_enum() || $t_data_type->is_datetime() || $t_data_type->is_guid()");
if(in_json)
str_builder.Append('"');
END();
IF("$t_data_type->is_bool()");
{
str_builder.Append(value.ToString().ToLowerInvariant());
}
ELIF("$t_data_type->is_datetime()");
{
IF("$t_data_type->is_nullable()");
{
str_builder.Append(value.Value.ToString("o", CultureInfo.InvariantCulture));
}
ELSE();
{
str_builder.Append(value.ToString("o", CultureInfo.InvariantCulture));
}
END();
}
ELSE();
{
str_builder.Append(value);
}
END();
IF("$t_data_type->is_enum() || $t_data_type->is_datetime() || $t_data_type->is_guid()");
if(in_json)
str_builder.Append('"');
END();
}
ELIF("$t_data_type->is_array() || $t_data_type->is_list()");
{
str_builder.Append('[');
bool first = true;
foreach (var element in value)
{
if (first)
{
first = false;
}
else
{
str_builder.Append(',');
}
ToString_impl(element, str_builder, in_json:true);
}
str_builder.Append(']');
}
ELSE();
throw new Exception("Internal error T5007");
END();
}