Пример #1
0
        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);
        }
Пример #2
0
 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 }
         );
 }
Пример #3
0
        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}]"));
        }
Пример #4
0
        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());
        }
Пример #5
0
        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();
            }
                               );
        }
Пример #6
0
        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>());
        }
Пример #7
0
        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>());
        }
Пример #8
0
        public static async Task <T> ReadAsAsync <T>(this HttpContent content)
        {
            var s = await content.ReadAsStringAsync();

            return(JsonConvert.DeserializeObject <T>(s, JsonConfig.GetSettings()));
        }