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); }