KeyValueSerializationInfo SerializeKeyValuePair(KeyValuePair <string, object> pair) { var info = new KeyValueSerializationInfo { Key = pair.Key, TypeName = pair.Value?.GetType()?.AssemblyQualifiedName }; if (pair.Value == null) { info.SerializedValue = null; } else { info.SerializedValue = null; var serializer = new DataContractSerializer(pair.Value.GetType()); using (var ms = new MemoryStream()) { serializer.WriteObject(ms, pair.Value); var buffer = ms.ToArray(); info.SerializedValue = Encoding.UTF8.GetString(buffer, 0, buffer.Length); } } return(info); }
KeyValuePair <string, object> DeserializeKeyValuePair(KeyValueSerializationInfo info) { var key = info.Key; object value = null; if (!string.IsNullOrWhiteSpace(info.SerializedValue)) { var type = Type.GetType(info.TypeName, false); if (type != null) { var serializer = new DataContractSerializer(type); using (var ms = new MemoryStream(Encoding.UTF8.GetBytes(info.SerializedValue))) { value = serializer.ReadObject(ms); } } } return(new KeyValuePair <string, object>(key, value)); }