public static string ToJson(List <PropertyTypeNode> nodes, TypeResolver resolver) { var serializer = new PropertyTypeNodeJsonSerializer(resolver); serializer.Serialize(nodes); return(Properties.Serialization.Json.SerializeObject(serializer.SerializedNodes)); }
public static string ToJson(JsonSchema schema) { if (schema?.PropertyTypeNodes == null) { throw new InvalidOperationException("Invalid property type nodes to be serialized"); } var nodesList = schema.PropertyTypeNodes.ToList(); // Collect all the dependancies (assemblies and defined symbols) var assemblyDependancies = new List <string>(); var builtinSymbols = new Dictionary <string, PropertyTypeNode.TypeTag>(); foreach (var node in nodesList) { assemblyDependancies.AddRange(node.DependantAssemblyNames()); var collector = new ContainerTypeCollector(); node.VisitRoot(collector); collector.BuiltinTypes.ToList().ForEach(kv => builtinSymbols.Add(kv.Key, kv.Value)); } // Serialize the property container tree var serializer = new PropertyTypeNodeJsonSerializer(new TypeResolver(assemblyDependancies, builtinSymbols)); serializer.Serialize(nodesList); var result = new Dictionary <string, object> { [Keys.VersionKey] = CurrentVersion, [Keys.UsingAssembliesKey] = schema.UsingAssemblies, [Keys.TypesKey] = serializer.SerializedNodes, [Keys.RequiredAssembliesKey] = schema.RequiredAssemblies }; return(Json.SerializeObject(result)); }