예제 #1
0
        public static void SerializePOCOSampleFile(string path)
        {
            Console.WriteLine("SERIALIZATION USING REFLECTION AND AVRO OBJECT CONTAINER FILES\n");

            //Create a data set using sample Class and struct
            var testData = new List <SensorData>
            {
                new SensorData {
                    Value = new byte[] { 1, 2, 3, 4, 5 }, Position = new Location {
                        Room = 243, Floor = 1
                    }
                },
                new SensorData {
                    Value = new byte[] { 6, 7, 8, 9 }, Position = new Location {
                        Room = 244, Floor = 1
                    }
                }
            };

            using (var w = new ChoAvroWriter <SensorData>(path))
                w.Write(testData);
            return;

            var sett = new AvroSerializerSettings();

            sett.Resolver = new AvroPublicMemberContractResolver();

            //Serializing and saving data to file
            //Creating a Memory Stream buffer
            using (var buffer = new MemoryStream())
            {
                Console.WriteLine("Serializing Sample Data Set...");

                //Create a SequentialWriter instance for type SensorData which can serialize a sequence of SensorData objects to stream
                //Data will be compressed using Deflate codec
                using (var w = AvroContainer.CreateWriter <SensorData>(buffer, sett, Codec.Deflate))
                {
                    using (var writer = new SequentialWriter <SensorData>(w, 24))
                    {
                        // Serialize the data to stream using the sequential writer
                        testData.ForEach(writer.Write);
                    }
                }

                //Save stream to file
                Console.WriteLine("Saving serialized data to file...");
                if (!WriteFile(buffer, path))
                {
                    Console.WriteLine("Error during file operation. Quitting method");
                    return;
                }
            }
            ////Reading and deserializing data
            ////Creating a Memory Stream buffer
            //using (var buffer = new MemoryStream())
            //{
            //    Console.WriteLine("Reading data from file...");

            //    //Reading data from Object Container File
            //    if (!ReadFile(buffer, path))
            //    {
            //        Console.WriteLine("Error during file operation. Quitting method");
            //        return;
            //    }

            //    Console.WriteLine("Deserializing Sample Data Set...");

            //    //Prepare the stream for deserializing the data
            //    buffer.Seek(0, SeekOrigin.Begin);

            //    //Create a SequentialReader for type SensorData which will derserialize all serialized objects from the given stream
            //    //It allows iterating over the deserialized objects because it implements IEnumerable<T> interface
            //    using (var reader = new SequentialReader<SensorData>(
            //        AvroContainer.CreateReader<SensorData>(buffer, true)))
            //    {
            //        var results = reader.Objects;

            //        //Finally, verify that deserialized data matches the original one
            //        Console.WriteLine("Comparing Initial and Deserialized Data Sets...");
            //        int count = 1;
            //        var pairs = testData.Zip(results, (serialized, deserialized) => new { expected = serialized, actual = deserialized });
            //        foreach (var pair in pairs)
            //        {
            //            bool isEqual = this.Equal(pair.expected, pair.actual);
            //            Console.WriteLine("For Pair {0} result of Data Set Identity Comparison is {1}", count, isEqual.ToString());
            //            count++;
            //        }
            //    }
            //}

            ////Delete the file
            //RemoveFile(path);
        }
예제 #2
0
        static void SerializeAndDeserializeDynamicTest()
        {
            string path = "AvroSampleReflection.avro";
            //SerializeDynamicSampleFile(path);

            var dict = new Dictionary <string, object>();

            dict.Add("1", 3);
            dict.Add("2", new Location {
                Room = 243, Floor = 1
            });

            ChoAvroRecordConfiguration config = null;
            AvroSerializerSettings     sett1  = null;

            using (var w = new ChoAvroWriter(path)
                           .WithAvroSerializer(AvroSerializer.Create <Dictionary <string, object> >(new AvroSerializerSettings()
            {
                Resolver = new ChoAvroPublicMemberContractResolver()
            }))
                           .Configure(c => c.KnownTypes = new List <Type> {
                typeof(Location), typeof(string), typeof(int)
            })
                           //.Configure(c => c.UseAvroSerializer = true)
                           //.Configure(c => c.AvroSerializerSettings.Resolver = new AvroDataContractResolverEx())
                   )
            {
                sett1  = w.Configuration.AvroSerializerSettings;
                config = w.Configuration;

                w.Write(dict);
                w.Write(dict);
                w.Write(dict);
            }
            //var sett = new AvroSerializerSettings();
            //sett.Resolver = new ChoAvroPublicMemberContractResolver(); // false) { Configuration = config };
            //sett.KnownTypes = new List<Type> { typeof(Location), typeof(string), typeof(int) };
            //var avroSerializer = AvroSerializer.Create<Dictionary<string, object>>(sett1);
            //using (var r = new StreamReader(path))
            //{
            //    var rec = avroSerializer.Deserialize(r.BaseStream);
            //    var rec2 = avroSerializer.Deserialize(r.BaseStream);
            //    var rec3 = avroSerializer.Deserialize(r.BaseStream);
            //    Console.WriteLine(rec.Dump());
            //    Console.WriteLine(rec2.Dump());
            //    Console.WriteLine(rec3.Dump());
            //    //var rec4 = avroSerializer.Deserialize(r);
            //}

            StringBuilder json = new StringBuilder();

            using (var r = new ChoAvroReader(path)
                           .Configure(c => c.KnownTypes = new List <Type> {
                typeof(Location), typeof(string), typeof(int)
            })
                           .Configure(c => c.UseAvroSerializer = true)
                           //.Configure(c => c.AvroSerializerSettings = sett1)
                           .Configure(c => c.NestedColumnSeparator = '_')
                   )
            {
                //var dt = r.AsDataTable();
                //Console.WriteLine(dt.Dump());
                //return;
                //foreach (var rec in r)
                //{
                //    Console.WriteLine(rec.Dump());
                //}
                //return;
                using (var w = new ChoJSONWriter(json)
                               .Configure(c => c.TurnOnAutoDiscoverJsonConverters = true)
                       )
                {
                    w.Write(r);
                }
            }
            Console.WriteLine(json.ToString());
        }
예제 #3
0
        static void POCOTest()
        {
            string path = "AvroPOCOSample1.avro";

            //SerializePOCOSampleFile(path);

            //var sett = new AvroSerializerSettings();
            //sett.Resolver = new ChoAvroPublicMemberContractResolver();
            //sett.KnownTypes = new List<Type> { typeof(Location), typeof(string) };
            //var avroSerializer = AvroSerializer.Create<SensorData>(sett);

            //using (var buffer = new StreamReader(File.OpenRead(path)))
            //{
            //    var actual1 = avroSerializer.Deserialize(buffer.BaseStream);
            //    var actual2 = avroSerializer.Deserialize(buffer.BaseStream);

            //    Console.WriteLine(actual1.Dump());
            //}
            //return;
            var testData = new List <SensorData>
            {
                new SensorData {
                    Value = new byte[] { 1, 2, 3, 4, 5 }, Position = new Location {
                        Room = 243, Floor = 1
                    }
                },
                new SensorData {
                    Value = new byte[] { 6, 7, 8, 9 }, Position = new Location {
                        Room = 244, Floor = 1
                    }
                }
            };

            using (var w = new ChoAvroWriter <SensorData>(path)
                   )
            {
                //w.Write(testData);
                w.Write(new SensorData {
                    Value = new byte[] { 1, 2, 3, 4, 5 }, Position = new Location {
                        Room = 243, Floor = 1
                    }
                });
                w.Write(new SensorData {
                    Value = new byte[] { 6, 7, 8, 9 }, Position = new Location {
                        Room = 244, Floor = 1
                    }
                });
            }

            StringBuilder json = new StringBuilder();

            using (var r = new ChoAvroReader <SensorData>(path)
                           //.WithAvroSerializer(AvroSerializer.Create<Dictionary<string, object>>(new AvroSerializerSettings()))
                   )
            {
                foreach (var rec in r)
                {
                    Console.WriteLine(rec.Dump());
                }
                return;

                using (var w = new ChoJSONWriter(json)
                               .Configure(c => c.TurnOnAutoDiscoverJsonConverters = true)
                       )
                {
                    w.Write(r);
                }
            }
            Console.WriteLine(json.ToString());
        }