public void CanSerializeDeserialize() { PluginFilter toSerialize = PluginFilter.Create.IsNamed("some name").Implements(typeof(string)).Or(PluginFilter.Create.DerivesFrom(typeof(int)).IsNamed("a name").HasVersion("1.0")); var knownTypes = new Type[] { typeof(PluginFilter.FilterOperation), typeof(PluginFilter[]) }; PluginFilter deserialized; using (var memstream = new MemoryStream()) { XmlTextWriter writer = new XmlTextWriter(memstream, Encoding.UTF8); var serializer = new DataContractSerializer(toSerialize.GetType(), knownTypes); serializer.WriteObject(writer, toSerialize); writer.Flush(); memstream.Seek(0, SeekOrigin.Begin); XmlTextReader reader = new XmlTextReader(memstream); deserialized = serializer.ReadObject(reader) as PluginFilter; } Assert.IsTrue(deserialized.Equals(toSerialize)); }