[Resolves #1744] Cleanup Xml Serializer & DataContractSerializer input and output formatters.
This commit is contained in:
parent
70efc5ae0a
commit
c6de763a6c
|
|
@ -106,7 +106,7 @@ namespace Microsoft.AspNet.Mvc.Xml
|
||||||
return GetDefaultValueForType(context.ModelType);
|
return GetDefaultValueForType(context.ModelType);
|
||||||
}
|
}
|
||||||
|
|
||||||
return await ReadInternal(context);
|
return await ReadInternalAsync(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -121,12 +121,23 @@ namespace Microsoft.AspNet.Mvc.Xml
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Called during deserialization to get the <see cref="XmlObjectSerializer"/>.
|
/// Gets the type to which the XML will be deserialized.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <returns>The <see cref="XmlObjectSerializer"/> used during deserialization.</returns>
|
/// <param name="declaredType">The declared type.</param>
|
||||||
protected virtual XmlObjectSerializer CreateDataContractSerializer(Type type)
|
/// <returns>The type to which the XML will be deserialized.</returns>
|
||||||
|
protected virtual Type GetSerializableType([NotNull] Type declaredType)
|
||||||
{
|
{
|
||||||
return new DataContractSerializer(SerializableErrorWrapper.CreateSerializableType(type), _serializerSettings);
|
return SerializableErrorWrapper.CreateSerializableType(declaredType);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Called during deserialization to get the <see cref="DataContractSerializer"/>.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="type">The type of object for which the serializer should be created.</param>
|
||||||
|
/// <returns>The <see cref="DataContractSerializer"/> used during deserialization.</returns>
|
||||||
|
protected virtual DataContractSerializer CreateSerializer([NotNull] Type type)
|
||||||
|
{
|
||||||
|
return new DataContractSerializer(type, _serializerSettings);
|
||||||
}
|
}
|
||||||
|
|
||||||
private object GetDefaultValueForType(Type modelType)
|
private object GetDefaultValueForType(Type modelType)
|
||||||
|
|
@ -139,16 +150,16 @@ namespace Microsoft.AspNet.Mvc.Xml
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Task<object> ReadInternal(InputFormatterContext context)
|
private Task<object> ReadInternalAsync(InputFormatterContext context)
|
||||||
{
|
{
|
||||||
var type = context.ModelType;
|
|
||||||
var request = context.ActionContext.HttpContext.Request;
|
var request = context.ActionContext.HttpContext.Request;
|
||||||
|
|
||||||
using (var xmlReader = CreateXmlReader(new DelegatingStream(request.Body)))
|
using (var xmlReader = CreateXmlReader(new DelegatingStream(request.Body)))
|
||||||
{
|
{
|
||||||
var xmlSerializer = CreateDataContractSerializer(type);
|
var type = GetSerializableType(context.ModelType);
|
||||||
var deserializedObject = xmlSerializer.ReadObject(xmlReader);
|
var dataContractSerializer = CreateSerializer(type);
|
||||||
deserializedObject = SerializableErrorWrapper.UnwrapSerializableErrorObject(type, deserializedObject);
|
var deserializedObject = dataContractSerializer.ReadObject(xmlReader);
|
||||||
|
deserializedObject = SerializableErrorWrapper.UnwrapSerializableErrorObject(context.ModelType, deserializedObject);
|
||||||
return Task.FromResult(deserializedObject);
|
return Task.FromResult(deserializedObject);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,17 @@ namespace Microsoft.AspNet.Mvc.Xml
|
||||||
return GetDefaultValueForType(context.ModelType);
|
return GetDefaultValueForType(context.ModelType);
|
||||||
}
|
}
|
||||||
|
|
||||||
return await ReadInternal(context);
|
return await ReadInternalAsync(context);
|
||||||
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Gets the type to which the XML will be deserialized.
|
||||||
|
/// </summary>
|
||||||
|
/// <param name="declaredType">The declared type.</param>
|
||||||
|
/// <returns>The type to which the XML will be deserialized.</returns>
|
||||||
|
protected virtual Type GetSerializableType([NotNull] Type declaredType)
|
||||||
|
{
|
||||||
|
return SerializableErrorWrapper.CreateSerializableType(declaredType);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -106,7 +116,7 @@ namespace Microsoft.AspNet.Mvc.Xml
|
||||||
/// <returns>The <see cref="XmlSerializer"/> used during deserialization.</returns>
|
/// <returns>The <see cref="XmlSerializer"/> used during deserialization.</returns>
|
||||||
protected virtual XmlSerializer CreateXmlSerializer(Type type)
|
protected virtual XmlSerializer CreateXmlSerializer(Type type)
|
||||||
{
|
{
|
||||||
return new XmlSerializer(SerializableErrorWrapper.CreateSerializableType(type));
|
return new XmlSerializer(type);
|
||||||
}
|
}
|
||||||
|
|
||||||
private object GetDefaultValueForType(Type modelType)
|
private object GetDefaultValueForType(Type modelType)
|
||||||
|
|
@ -119,16 +129,16 @@ namespace Microsoft.AspNet.Mvc.Xml
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
private Task<object> ReadInternal(InputFormatterContext context)
|
private Task<object> ReadInternalAsync(InputFormatterContext context)
|
||||||
{
|
{
|
||||||
var type = context.ModelType;
|
|
||||||
var request = context.ActionContext.HttpContext.Request;
|
var request = context.ActionContext.HttpContext.Request;
|
||||||
|
|
||||||
using (var xmlReader = CreateXmlReader(new DelegatingStream(request.Body)))
|
using (var xmlReader = CreateXmlReader(new DelegatingStream(request.Body)))
|
||||||
{
|
{
|
||||||
|
var type = GetSerializableType(context.ModelType);
|
||||||
var xmlSerializer = CreateXmlSerializer(type);
|
var xmlSerializer = CreateXmlSerializer(type);
|
||||||
var deserializedObject = xmlSerializer.Deserialize(xmlReader);
|
var deserializedObject = xmlSerializer.Deserialize(xmlReader);
|
||||||
deserializedObject = SerializableErrorWrapper.UnwrapSerializableErrorObject(type, deserializedObject);
|
deserializedObject = SerializableErrorWrapper.UnwrapSerializableErrorObject(context.ModelType, deserializedObject);
|
||||||
return Task.FromResult(deserializedObject);
|
return Task.FromResult(deserializedObject);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue