| 
					
				 | 
			
			
				@@ -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; 
			 | 
		
	
		
			
				 | 
				 | 
			
			
				         } 
			 |