private static async Task <InputFormatterResult> ReadRequestBody(string sampleJson, ModelStateDictionary modelStateDictionary)
        {
            var formatter = new FhirJsonInputFormatter(new FhirJsonParser(), ArrayPool <char> .Shared);

            var metaData = new DefaultModelMetadata(new EmptyModelMetadataProvider(), new DefaultCompositeMetadataDetailsProvider(new IMetadataDetailsProvider[0]), new DefaultMetadataDetails(ModelMetadataIdentity.ForType(typeof(Observation)), ModelAttributes.GetAttributesForType(typeof(Observation))));
            var context  = new InputFormatterContext(
                new DefaultHttpContext(),
                KnownActionParameterNames.Resource,
                modelStateDictionary,
                metaData,
                (stream, encoding) => new StreamReader(new MemoryStream(encoding.GetBytes(sampleJson))));

            return(await formatter.ReadRequestBodyAsync(context));
        }
        private bool CanRead(Type modelType, string contentType)
        {
            var formatter          = new FhirJsonInputFormatter(new FhirJsonParser(), ArrayPool <char> .Shared);
            var modelMetadata      = Substitute.For <ModelMetadata>(ModelMetadataIdentity.ForType(modelType));
            var defaultHttpContext = new DefaultHttpContext();

            defaultHttpContext.Request.ContentType = contentType;

            var result = formatter.CanRead(
                new InputFormatterContext(
                    defaultHttpContext,
                    "model",
                    new ModelStateDictionary(),
                    modelMetadata,
                    Substitute.For <Func <Stream, Encoding, TextReader> >()));

            return(result);
        }