public void GetSerializedGenericMetaData()
        {
            string eventName = "Person";
            Person message   = new Person()
            {
                Name = "Alice", Age = 27
            };
            var metaData = new List <KeyValue>();

            var    serializer         = new JsonSerializer();
            string serializedMetaData = serializer.Serialize(metaData);
            string serializedData     = serializer.Serialize(message);

            int serializationCounter = 0;

            Action <string, object> onDeserialized = (json, cSharpObj) => {
                if (cSharpObj is Person)
                {
                    Assert.Equal(serializedData, json);
                }
                if (cSharpObj is List <KeyValue> )
                {
                    Assert.Equal(serializedMetaData, json);
                }
                Assert.True(cSharpObj is List <KeyValue> || cSharpObj is Person);

                serializationCounter++;
            };
            var customSerializer = new SerializationMock(onDeserialized);

            ConnectionMock connection = new ConnectionMock();
            var            factory    = new ObservableFactory(connection, serializer);
            // Sending generic MetaData
            var observable = factory.GetSerialized <Person, List <KeyValue> >(eventName, customSerializer);

            observable.Subscribe(msg => {
                Assert.Equal(message.Name, msg.Data.Name);
                Assert.Equal(message.Age, msg.Data.Age);
                Assert.Equal(metaData, msg.MetaData);
            });


            var serverEvent = connection.ServerEvents[eventName] as Action <string, string>;

            Assert.NotNull(serverEvent);
            serverEvent(serializedMetaData, serializedData);

            Assert.Equal(2, serializationCounter);
        }