Пример #1
0
        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);
        }
Пример #2
0
        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));
            }
        }