/// <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); }
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); }
/// <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); }