public void Test_Serialization_and_Deserialization() { var inputList = new List <RunnerSubmission> { new ProjRunnerSubmission { Id = "E26C2109-F074-4117-B53F-0799E4140DEF", Input = "", NeedRun = true, ProjectFileName = "proj", ZipFileData = new byte[] { 1, 2, 3, 4, 5, 61, 23, 4, 3 } }, new FileRunnerSubmission { Code = "code", Id = "E9D8C168-A3D9-48CC-AF60-CE3B8A1D8314", Input = "", NeedRun = true } }; var json = JsonConvert.SerializeObject(inputList, JsonConfig.GetSettings(typeof(RunnerSubmission))); var deserializedList = JsonConvert.DeserializeObject <List <RunnerSubmission> >(json, JsonConfig.GetSettings(typeof(RunnerSubmission))); deserializedList.Should().BeEquivalentTo(inputList); }
public static void Register(HttpConfiguration config) { config.SuppressDefaultHostAuthentication(); config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); config.MapHttpAttributeRoutes(); config.Formatters.Where(f => f != config.Formatters.JsonFormatter).ToList() .ForEach(f => config.Formatters.Remove(f)); config.Formatters.JsonFormatter.SerializerSettings = JsonConfig.GetSettings(); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); }
public void Test_Serialization() { var list = new List <RunnerSubmission> { new ProjRunnerSubmission { Id = "E26C2109-F074-4117-B53F-0799E4140DEF", Input = "", NeedRun = true, ProjectFileName = "proj", ZipFileData = new byte[] { 1, 2, 3, 4, 5, 61, 23, 4, 3 } } }; var json = JsonConvert.SerializeObject(list, JsonConfig.GetSettings(typeof(RunnerSubmission))); Assert.That(json, Is.EqualTo("[{\"$type\":\"proj\",\"ZipFileData\":\"AQIDBAU9FwQD\",\"ProjectFileName\":\"proj\",\"Input\":\"\",\"NeedRun\":true,\"Id\":\"E26C2109-F074-4117-B53F-0799E4140DEF\",\"TimeLimit\":10}]")); }
public static void Register(HttpConfiguration config) { config.SuppressDefaultHostAuthentication(); config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); config.MapHttpAttributeRoutes(); config.Formatters.Where(f => f != config.Formatters.JsonFormatter).ToList() .ForEach(f => config.Formatters.Remove(f)); config.Formatters.JsonFormatter.SerializerSettings = JsonConfig.GetSettings(typeof(RunnerSubmission)); config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } ); /* Log all errors via ELMAH */ config.Services.Add(typeof(IExceptionLogger), new ElmahExceptionLogger()); }
public override void ConfigureMvc(IServiceCollection services) { var jsonSerializerSettings = JsonConfig.GetSettings(polymorphismBaseTypes); /* Asp.NET Core MVC https://www.strathweb.com/2020/02/asp-net-core-mvc-3-x-addmvc-addmvccore-addcontrollers-and-other-bootstrapping-approaches/ */ services.AddMvc(options => { options.EnableEndpointRouting = false; /* Add binder for passing Course object to actions */ options.ModelBinderProviders.Insert(0, new CourseBinderProvider()); /* Disable model checking because in other case stack overflow raised on course model binding. * See https://github.com/aspnet/Mvc/issues/7357 for details */ options.ModelMetadataDetailsProviders.Add(new SuppressChildValidationMetadataProvider(typeof(Course))); options.ModelMetadataDetailsProviders.Add(new SuppressChildValidationMetadataProvider(typeof(ICourse))); } ).AddApplicationPart(GetType().Assembly) .AddControllersAsServices() .AddNewtonsoftJson(opt => { opt.SerializerSettings.ContractResolver = new ApiHeaderJsonContractResolver(new ApiHeaderJsonNamingStrategyOptions { DefaultStrategy = new CamelCaseNamingStrategy(), HeaderName = "Json-Naming-Strategy", HttpContextAccessorProvider = services.BuildServiceProvider().GetService <IHttpContextAccessor>, NamingStrategies = new Dictionary <string, NamingStrategy> { { "camelcase", new CamelCaseNamingStrategy() }, { "snakecase", new SnakeCaseNamingStrategy() } } }, services.BuildServiceProvider().GetService <IMemoryCache>); opt.SerializerSettings.TypeNameHandling = jsonSerializerSettings.TypeNameHandling; opt.SerializerSettings.SerializationBinder = jsonSerializerSettings.SerializationBinder; opt.SerializerSettings.Converters = opt.SerializerSettings.Converters.Concat(jsonSerializerSettings.Converters).ToList(); } ); }
public async Task <List <RunnerSubmission> > TryGetSubmission() { var uri = GetUri("GetSubmissions", new [] { "language", SubmissionLanguage.CSharp.ToString("g") }); try { log.Info($"Отправляю запрос на {uri}"); var response = await httpClient.GetAsync(uri).ConfigureAwait(false); log.Info($"Получил ответ, код {(int) response.StatusCode} {response.StatusCode}, читаю содержимое"); if (response.IsSuccessStatusCode) { return(await response.Content.ReadAsJsonAsync <List <RunnerSubmission> >(JsonConfig.GetSettings()).ConfigureAwait(false)); } else { var text = await response.Content.ReadAsStringAsync().ConfigureAwait(false); log.Error($"StatusCode {response.StatusCode}\n{text}"); } } catch (Exception e) { log.Error($"Не могу подключиться к {httpClient.BaseAddress}{uri}", e); if (e.InnerException != null) { log.Error(e.InnerException.Message); } } return(new List <RunnerSubmission>()); }
void Test () { const string json = @"[{""$type"":""file"",""Code"":""code"",""Id"":""1029"",""Input"":"""",""NeedRun"":true}]"; var list = JsonConvert.DeserializeObject <List <RunnerSubmission> >(json, JsonConfig.GetSettings(typeof(RunnerSubmission))); Assert.That(list.Count, Is.EqualTo(1)); Assert.That(list[0], Is.InstanceOf <FileRunnerSubmission>()); }
public static async Task <T> ReadAsAsync <T>(this HttpContent content) { var s = await content.ReadAsStringAsync(); return(JsonConvert.DeserializeObject <T>(s, JsonConfig.GetSettings())); }