/// <summary> /// Generates schema for given .NET Type /// </summary> public static string GenerateSchema(Type type) { var schemaBuilder = new ReflectionSchemaBuilder(new AvroSerializerSettings()); var schema = schemaBuilder.BuildSchema(type); return(schema.ToString()); }
/// <summary> /// Generates schema for given .NET Type /// <paramref name="includeOnlyDataContractMembers"/> indicates if only classes with DataContractAttribute and properties marked with DataMemberAttribute should be returned /// </summary> public static string GenerateSchema(Type type, bool includeOnlyDataContractMembers) { var builder = new ReflectionSchemaBuilder(new AvroSerializerSettings(includeOnlyDataContractMembers)); var schema = builder.BuildSchema(type); return(schema.ToString()); }
/// <summary> /// Creates a serializer that allows serializing types attributed with <see cref="T:System.Runtime.Serialization.DataContractAttribute" />. /// </summary> /// <typeparam name="T">The type of objects to serialize.</typeparam> /// <param name="settings">The serialization settings.</param> /// <returns> A serializer. </returns> /// <exception cref="System.ArgumentNullException">Thrown if <paramref name="settings"/> is null.</exception> /// <remarks> /// This function can cause in-memory runtime code generation if the type <typeparamref name="T"/> has not used seen before. /// Otherwise, a cached version of the serializer is given to the user. /// </remarks> public static StateSerializer <T> Create <T>(SerializerSettings settings) { if (settings == null) { throw new ArgumentNullException(nameof(settings)); } var key = Tuple.Create(typeof(T), settings); lock (TypedSerializers) { if (TypedSerializers.TryGetValue(key, out object serializer) && settings.UseCache) { return((StateSerializer <T>)serializer); } } var reader = new ReflectionSchemaBuilder(settings).BuildSchema(typeof(T)); var serializerTyped = new StateSerializer <T>(reader); if (settings.UseCache) { TypedSerializers.Add(key, serializerTyped); } return(serializerTyped); }
private static AvroSerializer <T> CreateForCore <T>(string writerSchema, AvroSerializerSettings settings) { if (settings == null) { throw new ArgumentNullException("settings"); } var key = Tuple.Create(writerSchema, typeof(T), settings); var serializer = TypedSerializers.Get(key); if (serializer != null && settings.UseCache) { return(new AvroSerializer <T>(serializer)); } var reader = new ReflectionSchemaBuilder(settings).BuildSchema(typeof(T)); var generator = new SerializerGenerator(); var builderGenerator = new SerializerAssigningVisitor(settings); if (string.IsNullOrEmpty(writerSchema)) { builderGenerator.Visit(reader); serializer = new GeneratedSerializer { WriterSchema = reader, ReaderSchema = reader, Serialize = settings.GenerateSerializer ? generator.GenerateSerializer <T>(reader) : null, Deserialize = settings.GenerateDeserializer ? generator.GenerateDeserializer <T>(reader) : null }; } else { var writer = new JsonSchemaBuilder().BuildSchema(writerSchema); var matchedSchema = new EvolutionSchemaBuilder().Build(writer, reader); if (matchedSchema == null) { throw new SerializationException(string.Format(CultureInfo.InvariantCulture, "Writer schema does not match reader schema.")); } builderGenerator.Visit(matchedSchema); serializer = new GeneratedSerializer { WriterSchema = writer, ReaderSchema = reader, Deserialize = generator.GenerateDeserializer <T>(matchedSchema) }; } if (settings.UseCache) { TypedSerializers.Add(key, serializer); } return(new AvroSerializer <T>(serializer)); }
private static void RoundTripTestNullableSchema( AvroSerializerSettings settings, bool rootSchemaIsUnion, bool nullableValueSchemaNullableIsUnion, bool nullableValueSchemaNotNullableIsUnion, bool valueSchemaNullableIsUnion, bool valueSchemaNotNullableIsUnion, bool referenceSchemaNullableIsUnion, bool referenceSchemaNotNullableIsUnion) { var builder = new ReflectionSchemaBuilder(settings); var schema = builder.BuildSchema(typeof(ClassWithSchemaNullableField)); RecordSchema recordSchema = null; if (rootSchemaIsUnion) { var asUnion = schema as UnionSchema; Assert.IsNotNull(asUnion); var innerNullSchema = asUnion.Schemas[0] is NullSchema ? asUnion.Schemas[0] : asUnion.Schemas[1]; recordSchema = asUnion.Schemas.Single(s => s != innerNullSchema) as RecordSchema; Assert.IsNotNull(recordSchema); } else { recordSchema = schema as RecordSchema; Assert.IsNotNull(recordSchema); } Assert.AreEqual(typeof(ClassWithSchemaNullableField).GetAllFields().Count(), recordSchema.Fields.Count); var nullableValueSchemaNullable = recordSchema.Fields.Single(f => f.Name == "NullableValueNullableSchema"); ValidateSchema(nullableValueSchemaNullable.TypeSchema, nullableValueSchemaNullableIsUnion, typeof(IntSchema)); var nullableValueSchemaNotNullable = recordSchema.Fields.Single(f => f.Name == "NullableValueNotNullableSchema"); ValidateSchema(nullableValueSchemaNotNullable.TypeSchema, nullableValueSchemaNotNullableIsUnion, typeof(IntSchema)); var valueSchemaNullable = recordSchema.Fields.Single(f => f.Name == "NotNullableValueNullableSchema"); ValidateSchema(valueSchemaNullable.TypeSchema, valueSchemaNullableIsUnion, typeof(IntSchema)); var valueSchemaNotNullable = recordSchema.Fields.Single(f => f.Name == "NotNullableValueNotNullableSchema"); ValidateSchema(valueSchemaNotNullable.TypeSchema, valueSchemaNotNullableIsUnion, typeof(IntSchema)); var referenceSchemaNullable = recordSchema.Fields.Single(f => f.Name == "ReferenceFieldNullableSchema"); ValidateSchema(referenceSchemaNullable.TypeSchema, referenceSchemaNullableIsUnion, typeof(RecordSchema)); var referenceSchemaNotNullable = recordSchema.Fields.Single(f => f.Name == "ReferenceFieldNotNullableSchema"); ValidateSchema(referenceSchemaNotNullable.TypeSchema, referenceSchemaNotNullableIsUnion, typeof(RecordSchema)); }
public void BuildDateTimeSchema(Type type) { //Act var builder = new ReflectionSchemaBuilder(); TypeSchema schema = builder.BuildSchema(type); //Assert Assert.IsType <TimestampMillisecondsSchema>(schema); var resolvedSchema = (TimestampMillisecondsSchema)schema; Assert.NotNull(resolvedSchema); }
public void BuildGuidSchema(Type type) { //Act var builder = new ReflectionSchemaBuilder(); TypeSchema schema = builder.BuildSchema(type); //Assert Assert.IsType <UuidSchema>(schema); var uuidSchema = (UuidSchema)schema; Assert.NotNull(uuidSchema); }
public void BuildTimespanSchema(Type type) { //Act var builder = new ReflectionSchemaBuilder(); TypeSchema schema = builder.BuildSchema(type); //Assert Assert.IsType <DurationSchema>(schema); var resolvedSchema = (DurationSchema)schema; Assert.NotNull(resolvedSchema); }
public void BuildDecimalSchema(Type type, int precision, int scale) { //Act var builder = new ReflectionSchemaBuilder(); TypeSchema schema = builder.BuildSchema(type); //Assert Assert.IsType <DecimalSchema>(schema); var decimalSchema = (DecimalSchema)schema; Assert.NotNull(schema); Assert.Equal(precision, decimalSchema.Precision); Assert.Equal(scale, decimalSchema.Scale); }
public void BuildTimeSpanSchema(Type type) { //Act var builder = new ReflectionSchemaBuilder(); TypeSchema schema = builder.BuildSchema(type); //Assert Assert.IsType <UnionSchema>(schema); var unionSchema = (UnionSchema)schema; Assert.IsType <NullSchema>(unionSchema.Schemas[0]); Assert.IsType <DurationSchema>(unionSchema.Schemas[1]); var resolvedSchema = (DurationSchema)unionSchema.Schemas[1]; Assert.NotNull(resolvedSchema); }
public void BuildNullableDateTimeSchema(Type type) { //Act var builder = new ReflectionSchemaBuilder(); TypeSchema schema = builder.BuildSchema(type); //Assert Assert.IsType <UnionSchema>(schema); var unionSchema = (UnionSchema)schema; Assert.IsType <NullSchema>(unionSchema.Schemas[0]); Assert.IsType <TimestampMillisecondsSchema>(unionSchema.Schemas[1]); var resolvedSchema = (TimestampMillisecondsSchema)unionSchema.Schemas[1]; Assert.NotNull(resolvedSchema); }
public void BuildNullableGuidSchema(Type type) { //Act var builder = new ReflectionSchemaBuilder(); TypeSchema schema = builder.BuildSchema(type); //Assert Assert.IsType <UnionSchema>(schema); var unionSchema = (UnionSchema)schema; Assert.IsType <NullSchema>(unionSchema.Schemas[0]); Assert.IsType <UuidSchema>(unionSchema.Schemas[1]); var uuidSchema = (UuidSchema)unionSchema.Schemas[1]; Assert.NotNull(uuidSchema); }
public void BuildSchema_RecordWithAttributes_AttributesAreAppliedToSchema() { //Arrange var builder = new ReflectionSchemaBuilder(); //Act TypeSchema schema = builder.BuildSchema(typeof(AttributeClass)); //Assert Assert.IsType <RecordSchema>(schema); var resultSchema = (RecordSchema)schema; Assert.NotNull(resultSchema); Assert.Equal("This is Doc of User Class", resultSchema.Doc); Assert.Equal("User", resultSchema.Name); Assert.Equal("userspace", resultSchema.Namespace); var stringField = resultSchema.Fields.SingleOrDefault(f => f.Name == "name"); Assert.NotNull(stringField); Assert.Equal("This is Doc of record field", stringField.Doc); var intField = resultSchema.Fields.SingleOrDefault(f => f.Name == "favorite_number"); Assert.NotNull(intField); Assert.True(intField.HasDefaultValue); Assert.Equal(2137, intField.DefaultValue); var decimalField = resultSchema.Fields.SingleOrDefault(f => f.Name == nameof(AttributeClass.AvroDecimal)); Assert.IsType <DecimalSchema>(decimalField.TypeSchema); var decimalSchema = (DecimalSchema)decimalField.TypeSchema; Assert.Equal(2, decimalSchema.Scale); Assert.Equal(4, decimalSchema.Precision); }
/// <summary> /// Generates schema for given .NET Type /// </summary> public static string GenerateSchema(Type type) { var reader = new ReflectionSchemaBuilder(new AvroSerializerSettings(false)).BuildSchema(type); return(reader.ToString()); }
public ReflectionSchemaTests() { this.builder = new ReflectionSchemaBuilder(this.settings); }
public void Dispose() { this.builder = null; }
public void TestTeardown() { this.builder = null; }
public void TestSetup() { this.builder = new ReflectionSchemaBuilder(this.settings); }
public static string GenerateSchema(Type type, bool usePropertyNameAsAlias = false, bool includeOnlyDataContractMembers = false) { var reader = new ReflectionSchemaBuilder(new AvroSerializerSettings(usePropertyNameAsAlias, includeOnlyDataContractMembers)).BuildSchema(type); return(reader.ToString()); }