/// <summary> /// Performs content negotiating by selecting the most appropriate <see cref="MediaTypeFormatter"/> out of the passed in /// <paramref name="formatters"/> for the given <paramref name="request"/> that can serialize an object of the given /// <paramref name="type"/>. /// </summary> /// <param name="type">The type to be serialized.</param> /// <param name="request">The request.</param> /// <param name="formatters">The set of <see cref="MediaTypeFormatter"/> objects from which to choose.</param> /// <returns>The result of the negotiation containing the most appropriate <see cref="MediaTypeFormatter"/> instance, /// or <c>null</c> if there is no appropriate formatter.</returns> public virtual ContentNegotiationResult Negotiate(Type type, HttpRequestMessage request, IEnumerable <MediaTypeFormatter> formatters) { if (type == null) { throw new ArgumentNullException("type"); } if (request == null) { throw new ArgumentNullException("request"); } if (formatters == null) { throw new ArgumentNullException("formatters"); } MediaTypeHeaderValue mediaType; MediaTypeFormatter formatter = RunNegotiation(type, request, formatters, out mediaType); if (formatter != null) { formatter = formatter.GetPerRequestFormatterInstance(type, request, mediaType); return(new ContentNegotiationResult(formatter, mediaType)); } return(null); }