|
@@ -40,72 +40,36 @@ namespace InABox.Core
|
|
|
return null;
|
|
|
|
|
|
var result = new CoreTable();
|
|
|
- try
|
|
|
+ ReadObject(ref reader, (ref Utf8JsonReader reader, string propertyName) =>
|
|
|
{
|
|
|
- reader.Read();
|
|
|
- while(reader.TokenType != JsonTokenType.EndObject)
|
|
|
+ if (propertyName == "Columns")
|
|
|
{
|
|
|
- if (reader.TokenType == JsonTokenType.PropertyName)
|
|
|
+ ReadObject(ref reader, (ref Utf8JsonReader reader, string name) =>
|
|
|
{
|
|
|
- var propertyName = reader.GetString();
|
|
|
- reader.Read(); // Move to property value
|
|
|
- if (propertyName == "Columns")
|
|
|
- {
|
|
|
- if(reader.TokenType != JsonTokenType.StartObject)
|
|
|
- {
|
|
|
- throw new SerialisationException($"Unexpected token type after \"Columns\": {reader.TokenType}");
|
|
|
- }
|
|
|
- reader.Read(); // Skip over StartObject
|
|
|
- while (reader.TokenType != JsonTokenType.EndObject)
|
|
|
- {
|
|
|
- string name = reader.GetString()!;
|
|
|
- reader.Read(); // Advance to the property value
|
|
|
- var type = reader.GetString();
|
|
|
- result.Columns.Add(new CoreColumn { ColumnName = name, DataType = CoreUtils.GetEntity(type ?? "") });
|
|
|
- reader.Read(); // Move to next token
|
|
|
- }
|
|
|
- reader.Read(); // Skip EndObject
|
|
|
- }
|
|
|
- else if (propertyName == "Rows")
|
|
|
+ var type = reader.GetString();
|
|
|
+ result.Columns.Add(new CoreColumn { ColumnName = name, DataType = CoreUtils.GetEntity(type ?? "") });
|
|
|
+ });
|
|
|
+ }
|
|
|
+ else if (propertyName == "Rows")
|
|
|
+ {
|
|
|
+ ReadArray(ref reader, (ref Utf8JsonReader reader) =>
|
|
|
+ {
|
|
|
+ var iCol = 0;
|
|
|
+ var newRow = result.NewRow();
|
|
|
+ ReadArray(ref reader, (ref Utf8JsonReader reader) =>
|
|
|
{
|
|
|
- if(reader.TokenType != JsonTokenType.StartArray)
|
|
|
- {
|
|
|
- throw new SerialisationException($"Unexpected token type after \"Rows\": {reader.TokenType}");
|
|
|
- }
|
|
|
- reader.Read(); // Skip StartArray
|
|
|
- while (reader.TokenType != JsonTokenType.EndArray)
|
|
|
- {
|
|
|
- if(reader.TokenType != JsonTokenType.StartArray)
|
|
|
- {
|
|
|
- throw new SerialisationException($"Unexpected token type: {reader.TokenType}");
|
|
|
- }
|
|
|
- reader.Read(); // Skip StartArray
|
|
|
- var iCol = 0;
|
|
|
- var newrow = result.NewRow();
|
|
|
- while (reader.TokenType != JsonTokenType.EndArray)
|
|
|
- {
|
|
|
- var col = result.Columns[iCol];
|
|
|
- newrow[col.ColumnName] = CoreUtils.ChangeType(ReadJson(ref reader), col.DataType);
|
|
|
- reader.Read();
|
|
|
- iCol++;
|
|
|
- }
|
|
|
- result.Rows.Add(newrow);
|
|
|
- reader.Read(); // Skip EndArray
|
|
|
- }
|
|
|
- reader.Read(); // Skip EndArray
|
|
|
- }
|
|
|
- }
|
|
|
+ var col = result.Columns[iCol];
|
|
|
+ newRow[col.ColumnName] = CoreUtils.ChangeType(ReadJson(ref reader), col.DataType);
|
|
|
+ iCol++;
|
|
|
+ });
|
|
|
+ result.Rows.Add(newRow);
|
|
|
+ });
|
|
|
}
|
|
|
- }
|
|
|
- catch(SerialisationException e)
|
|
|
- {
|
|
|
- Logger.Send(LogType.Error, "", $"SerialisationException: {e.Message}");
|
|
|
- return null;
|
|
|
- }
|
|
|
- catch (Exception e)
|
|
|
- {
|
|
|
- Logger.Send(LogType.Error, "", string.Format("*** Unknown Error: {0}\n{1}", e.Message, e.StackTrace));
|
|
|
- }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ reader.Skip();
|
|
|
+ }
|
|
|
+ });
|
|
|
|
|
|
return result;
|
|
|
}
|