private KeyValueSerializationInfo SerializeSerializaeInfo(string key, object value, IEnumerable <Type> knownTypes) { if (key == null) { throw new ArgumentNullException("key"); } if (value == null) { throw new ArgumentNullException("value"); } var serializationInfo = new KeyValueSerializationInfo { Key = key, Type = value.GetType().FullName }; using (var writer = new StringWriter()) using (var xmlWriter = new XmlTextWriter(writer)) { DataContractSerializer serializer = new DataContractSerializer(value.GetType(), knownTypes); serializer.WriteObject(xmlWriter, value); // シリアライズした文字列を取得 serializationInfo.Value = writer.ToString(); } return(serializationInfo); }
private object DeserializSeserializeInfo(KeyValueSerializationInfo info, IEnumerable <Type> knownTypes) { if (info == null) { throw new ArgumentNullException("info"); } // 設定の型を取得 Type type = Type.GetType(info.Type, false); if (type == null) { foreach (var knownType in knownTypes) { if (knownType.FullName == info.Type) { type = knownType; break; } } } // 型が取得できなかったらnullを返す if (type == null) { return(null); } // デシリアライズ using (var xmlReader = new XmlTextReader(new StringReader(info.Value))) { DataContractSerializer serializer = new DataContractSerializer(type, knownTypes); return(serializer.ReadObject(xmlReader)); } }