/// <summary>
        /// Deserializes <paramref name="input"/> to the object of the type <paramref name="outputType"/> and returns it.
        /// </summary>
        /// <param name="deserializer">The deserializer to use.</param>
        /// <param name="outputType">The type of the object to create.</param>
        /// <param name="input">The serialized input.</param>
        /// <returns>The deserialized object of the type <paramref name="outputType"/>.</returns>
        public static object Deserialize(this IDeserializer deserializer, Type outputType, string input)
        {
            using (MemoryStream stream = new MemoryStream(Encoding.UTF8.GetBytes(input)))
            {
                DefaultDeserializerContext context = new DefaultDeserializerContext(outputType);
                bool result = deserializer.TryDeserialize(stream, context);
                if (result)
                {
                    return(context.Output);
                }
            }

            throw new DeserializationFailedException(outputType, input);
        }
コード例 #2
0
        public bool TryDeserialize(Stream input, IDeserializerContext context)
        {
            if (typeof(IList).IsAssignableFrom(context.OutputType))
            {
                DefaultDeserializerContext innerContext = new DefaultDeserializerContext(context.OutputType.GetGenericArguments()[0]);
                if (inner.TryDeserialize(input, innerContext))
                {
                    context.Output = innerContext.Output;
                    return(true);
                }

                return(false);
            }

            return(inner.TryDeserialize(input, context));
        }
        private bool TryDeserializeEnvelope(Stream input, IDeserializerContext context, out DefaultDeserializerContext innerContext)
        {
            if (typeof(Envelope).IsAssignableFrom(context.OutputType))
            {
                Type innerType = typeof(object);
                if (context.OutputType.IsGenericType)
                {
                    innerType = context.OutputType.GetGenericArguments()[0];
                }

                innerContext = new DefaultDeserializerContext(innerType);
                foreach (string key in context.Metadata.Keys)
                {
                    innerContext.Metadata.Add(key, context.Metadata.Get <object>(key));
                }

                innerContext.AddEnvelopeMetadata(new KeyValueCollection());
                return(true);
            }

            innerContext = null;
            return(false);
        }
コード例 #4
0
 /// <summary>
 /// Sets 'Metadata' to the metadata of the <paramref name="context"/>.
 /// </summary>
 /// <param name="context">The context which metadata to extend.</param>
 /// <param name="value">The vale of the 'Metadata'.</param>
 /// <returns><paramref name="envolope"/>(for fluency).</returns>
 public static IDeserializerContext AddEnvelopeMetadata(this DefaultDeserializerContext context, IKeyValueCollection value)
 {
     Ensure.NotNull(context, "context");
     context.Metadata.Add("EnvelopeMetadata", value);
     return(context);
 }