예제 #1
0
        private static object InterceptValue(object graph, IEdmTypeReference expectedType, string elementName,
                                             ODataSerializerContext writeContext, object declaringInstance, IEdmTypeReference declaringTypeReference,
                                             IEdmType declaringType, Type declaringClrType)
        {
            var modelBuilder  = EdmModelHelperMethods.Configuration[writeContext.Model];
            var assemblyNames = writeContext.Request.HttpContext.RequestServices.GetService <AssembliesResolver>();
            var clrType       = EdmLibHelpers.GetClrType(expectedType, writeContext.Model, assemblyNames);
            var serializers   = modelBuilder.GetSerializeInterceptors(
                clrType).ToList();
            var isRoot = declaringInstance == null &&
                         declaringTypeReference == null &&
                         declaringType == null &&
                         declaringClrType == null;

            if (serializers.Any())
            {
                if (declaringClrType == null && declaringTypeReference != null)
                {
                    declaringClrType = declaringType != null
                                                ? EdmLibHelpers.GetClrType(declaringType, writeContext.Model, assemblyNames)
                                                : EdmLibHelpers.GetClrType(declaringTypeReference, writeContext.Model, assemblyNames);
                }
                var vp = new ValueInterceptor(
                    graph, clrType, elementName, declaringInstance, declaringClrType, isRoot);
                foreach (var serializer in serializers)
                {
                    if (!serializer.Process(vp))
                    {
                        break;
                    }
                }
                graph = vp.Value;
            }
            return(graph);
        }
예제 #2
0
		private static object InterceptValue(object graph, IEdmTypeReference expectedType, string elementName,
			ODataSerializerContext writeContext, object declaringInstance, IEdmTypeReference declaringTypeReference,
			IEdmType declaringType, Type declaringClrType)
		{
			var modelBuilder = EdmModelHelperMethods.Configuration[writeContext.Model];
			var assemblyNames = writeContext.Request.HttpContext.RequestServices.GetService<AssembliesResolver>();
			var clrType = EdmLibHelpers.GetClrType(expectedType, writeContext.Model, assemblyNames);
			var serializers = modelBuilder.GetSerializeInterceptors(
				clrType).ToList();
			var isRoot = declaringInstance == null &&
						 declaringTypeReference == null &&
						 declaringType == null &&
						 declaringClrType == null;

			if (serializers.Any())
			{
				if (declaringClrType == null && declaringTypeReference != null)
				{
					declaringClrType = declaringType != null
						? EdmLibHelpers.GetClrType(declaringType, writeContext.Model, assemblyNames)
						: EdmLibHelpers.GetClrType(declaringTypeReference, writeContext.Model, assemblyNames);
				}
				var vp = new ValueInterceptor(
					graph, clrType, elementName, declaringInstance, declaringClrType, isRoot);
				foreach (var serializer in serializers)
				{
					if (!serializer.Process(vp))
					{
						break;
					}
				}
				graph = vp.Value;
			}
			return graph;
		}