/// <summary> /// Deserializes the schema. /// </summary> /// <param name="schemaBody">The schema body.</param> /// <param name="schemaTypeName">Name of the schema type.</param> /// <returns></returns> public IValueSchema <object> DeserializeSchema(string schemaBody, string schemaTypeName) { Type schemaType = ResolveType(schemaTypeName); return(!string.IsNullOrEmpty(schemaBody) ? JsonSchemaDeserializer.Deserialize(schemaType, schemaBody) : Create(typeof(object)).Wrap()); }
/// <summary> /// Deserialize schemas and collection elements /// </summary> /// <param name="collection"></param> /// <returns></returns> public static IPropertySetCollection Deserialize(this PersistentPropertyCollection collection) { PropertySchemaSet schemaSet = new PropertySchemaSet(new PropertySchemaFactory()); PropertySetCollection restored = new PropertySetCollection(schemaSet); //restore schemas foreach (PersistentPropertyElement element in collection.Elements) { PersistentSchemaElement schemaElement = collection.Schemas.First(s => s.SchemaName == element.Name); var valueSchema = JsonSchemaDeserializer.Deserialize(schemaElement.SchemaType, schemaElement.SchemaBody); SerializationTypeHint hint = (SerializationTypeHint)schemaElement.SerializationHint; Func <PersistentPropertyElement, object> valueRetriever; if (!_serializationMap.TryGetValue(hint, out valueRetriever)) { throw new ArgumentException($"{element.Name} {hint}"); } object val = valueRetriever(element); switch (hint) { case SerializationTypeHint.JsonString: val = valueSchema.Serializer.Deserialize(val.ToString()); break; case SerializationTypeHint.BinaryObject: case SerializationTypeHint.Object: byte[] data = (byte[])val; val = valueSchema.Serializer.Deserialize(data); break; } restored.Add(element.Name, val, valueSchema); } return(restored); }
public void TestDeserializeIntSchema() { IValueSchema <int?> schema = new IntSchema { AllowNull = false, DefaultValue = 10, MaxValue = 100, MinValue = 2, PossibleValues = new int?[] { 10, 20, 30, 100 } }; SchemaJsonSerializationVisitor visitor = new SchemaJsonSerializationVisitor(); schema.Accept(visitor); IValueSchema <object> vs = JsonSchemaDeserializer.Deserialize(visitor.SchemaType, visitor.JsonValue); Assert.IsNotNull(vs); Assert.AreEqual(typeof(int?), vs.Type); }
public void TestDeserializeStringSchema() { IValueSchema <string> schema = new StringSchema { AllowNull = true, DefaultValue = "abc", MaxLength = 100, MinLength = 2, PossibleValues = new[] { "abc", "def" } }; SchemaJsonSerializationVisitor visitor = new SchemaJsonSerializationVisitor(); schema.Accept(visitor); IValueSchema <object> vs = JsonSchemaDeserializer.Deserialize(visitor.SchemaType, visitor.JsonValue); Assert.IsNotNull(vs); Assert.AreEqual(typeof(string), vs.Type); }