コード例 #1
0
        public static string SerializeDictionary(dynamic obj, JsonFormatting format, int indent)
        {
            string result = "";

            foreach (dynamic element in obj)
            {
                string value = Serialize("", element.Value, format, indent, true);

                if (format == JsonFormatting.Compact)
                {
                    result += "\"" + element.Key + "\"" + ":" + value;
                }
                else
                {
                    result += "\"" + element.Key + "\"" + ": " + value;
                }
            }

            result = result.TrimEnd().Trim(',');
            if (format == JsonFormatting.Indented)
            {
                result = JsonWriter.Indent(result, indent);
            }

            return(result);
        }
コード例 #2
0
        public static string SerializaName(JsonFormatting jsonFormatting, string name)
        {
            var key = jsonFormatting.ToString() + name;

            if (_chachedNames.ContainsKey(key))
            {
                return(_chachedNames[key]);
            }
            string value = null;

            lock (_chachedNames)
            {
                switch (jsonFormatting)
                {
                case JsonFormatting.Auto:
                    value = name;
                    break;

                case JsonFormatting.CamelCase:
                    var s = name.Substring(1, name.Length - 1);
                    value = $"{name[0].ToString().ToLower()}{s}";
                    break;

                case JsonFormatting.LowerCase:
                    value = name.ToLower();
                    break;
                }
                return(_chachedNames.GetOrAdd(key, value));
            }
        }
コード例 #3
0
        public static bool RewriteJson(string path, JsonFormatting jsonFormatting)
        {
            switch (jsonFormatting)
            {
            case JsonFormatting.Unchanged:
                return(false);

            case JsonFormatting.PrettyWhenUnindented:
                var header = ReadFirstChars(path, 4);
                if (!Regex.IsMatch(header, @"^(\{|\[)[\r\n]+ +"))
                {
                    RewriteJson(path, Formatting.Indented);
                    return(true);
                }
                return(false);

            case JsonFormatting.Pretty:
                RewriteJson(path, Formatting.Indented);
                return(true);

            case JsonFormatting.Minify:
                RewriteJson(path, Formatting.None);
                return(true);

            default:
                throw new NotImplementedException();
            }
        }
コード例 #4
0
        public void RewriteJson(JsonFormatting formatting, string input, string expected, bool expectedRewrite)
        {
            File.WriteAllText(_path, input);
            var actualRewrite = JsonFileHelper.RewriteJson(_path, formatting);

            Assert.Equal(expected, File.ReadAllText(_path));
            Assert.Equal(expectedRewrite, actualRewrite);
        }
コード例 #5
0
        public static string WriteName(string name, JsonFormatting format)
        {
            string result = "";

            result += "\"" + name + "\"";

            return result;
        }
コード例 #6
0
        public static string SerializeMultiDimensionalArray(Array obj, JsonFormatting format, int indent)
        {
            string result = "";

            List <List <dynamic> > Arrays  = new List <List <dynamic> >();
            List <int>             lengths = new List <int>();

            for (int a = 0; a < obj.Rank; a++)
            {
                Arrays.Add(new List <dynamic>());
            }

            int currentRank = 0;
            int i           = 0;

            foreach (dynamic dym in obj)
            {
                if (currentRank < Arrays.Count - 1)
                {
                    if ((obj.GetLength(currentRank) - 1) == i)
                    {
                        currentRank++;
                        i = 0;
                        Arrays[currentRank].Add(dym);
                    }
                    else
                    {
                        Arrays[currentRank].Add(dym);
                        i++;
                    }
                }
            }

            foreach (List <dynamic> itm in Arrays)
            {
                result += Serialize("", itm, format, indent - 1, true);
            }

            if (format == JsonFormatting.Indented)
            {
                result = JsonWriter.Indent(result, indent);
            }
            return(result);
            // ((Array)obj).GetLength(0)
        }
コード例 #7
0
        public static async Task ExecuteAsync(
            HttpClient httpClient,
            string serviceIndexUrl,
            string dataDir,
            DownloadDepth depth,
            JsonFormatting jsonFormatting,
            int?maxPages,
            int?maxCommits,
            bool formatPaths,
            int parallelDownloads,
            IDepthLogger logger)
        {
            var cursorProvider = new CursorFactory(
                cursorSuffix: $"download.{depth}",
                defaultCursorValue: DateTimeOffset.MinValue,
                logger: logger);

            var downloader = new Downloader(
                httpClient,
                new DownloaderConfiguration
            {
                ServiceIndexUrl   = serviceIndexUrl,
                DataDirectory     = dataDir,
                Depth             = depth,
                JsonFormatting    = jsonFormatting,
                MaxPages          = maxPages,
                MaxCommits        = maxCommits,
                SaveToDisk        = true,
                FormatPaths       = formatPaths,
                ParallelDownloads = parallelDownloads,
            },
                cursorProvider,
                NullVisitor.Instance,
                logger);

            await downloader.DownloadAsync();
        }
コード例 #8
0
        public static string SerializeArray(dynamic obj, JsonFormatting format, int indent)
        {
            // Check if array is multi-dimensional

            if (obj is Array && ((Array)obj).Rank >= 2)
            {
                return(SerializeMultiDimensionalArray(obj, format, indent));
            }

            string result = "";

            foreach (object element in obj)
            {
                result += Serialize("", element, format, indent, true);
            }

            result = result.TrimEnd().TrimEnd(',');
            if (format == JsonFormatting.Indented)
            {
                result = JsonWriter.Indent(result, indent);
            }

            return(result);
        }
コード例 #9
0
 /// <summary>
 /// 实体转换为JSON字符串,指定是否格式化
 /// </summary>
 /// <typeparam name="T">实体类型</typeparam>
 /// <param name="t">实体对象</param>
 /// <param name="formatting">指定是否格式化</param>
 /// <returns>Json字符串</returns>
 public static string JsonSerializer <T>(T t, JsonFormatting formatting)
 {
     return(JsonConvert.SerializeObject(t, (Formatting)formatting));
 }
コード例 #10
0
ファイル: HttpTracerTests.cs プロジェクト: BSiLabs/HttpTracer
        private static async Task <FakeLogger> ExecuteFakeRequest(HttpMessageParts?verbosity = null, JsonFormatting jsonFormatting = JsonFormatting.None, string responseContent = FakeHttpTraceHandler.FakeResponseContent)
        {
            var logger = new FakeLogger();

            var httpClientHandler = new HttpClientHandler();

            httpClientHandler.UseCookies = true;
            httpClientHandler.CookieContainer.Add(new Cookie(CookieName, CookieValue, "", new Uri(TestUri).Host));

            HttpContent fakeContent = new StringContent("{\"Foo\": \"Bar\"}", Encoding.Default, "application/json");
            var         builder     = new HttpHandlerBuilder(new FakeHttpTraceHandler(httpClientHandler, logger)
            {
                ResponseContent = responseContent,
                JsonFormatting  = jsonFormatting
            });

            builder.AddHandler(new FakeHandler())
            .AddHandler(new SillyHandler())
            .AddHandler(new FakeHandler());

            if (verbosity != null)
            {
                builder.SetHttpTracerVerbosity(verbosity.Value);
            }

            var client = new HttpClient(builder.Build());
            await client.PostAsync(TestUri, fakeContent);

            return(logger);
        }
コード例 #11
0
        private async Task Consumer_Received(object sender, BasicDeliverEventArgs eventArgs)
        {
            var eventName = eventArgs.RoutingKey;
            var message   = Encoding.UTF8.GetString(eventArgs.Body.ToArray());

            try
            {
                if (message.ToLowerInvariant().Contains("throw-fake-exception"))
                {
                    throw new InvalidOperationException($"Fake exception requested: \"{JsonFormatting.Formated(message)}\"");
                }

                await ProcessEvent(eventName, message);
            }
            catch (Exception ex)
            {
                _logger.LogWarning(ex, "----- ERROR Processing message \"{Message}\"", JsonFormatting.Formated(message));
            }

            // Even on exception we take the message off the queue.
            // in a REAL WORLD app this should be handled with a Dead Letter Exchange (DLX).
            // For more information see: https://www.rabbitmq.com/dlx.html
            _consumerChannel.BasicAck(eventArgs.DeliveryTag, multiple: false);
        }
コード例 #12
0
        public string Analisar(Pedido pedido)
        {
            string        retorno    = string.Empty;
            StringBuilder parametros = new StringBuilder();
            string        preencher  = "preencher";

            parametros.Append("{");
            parametros.AppendLine();
            parametros.Append("ApiKey:");
            parametros.Append(string.Format("\"{0}\",", pedido.TokenLoja));
            parametros.AppendLine();
            parametros.Append("LoginToken: ");
            parametros.Append(string.Format("\"{0}\",", pedido.TokenLoja));
            parametros.AppendLine();
            parametros.Append("Orders: [");
            parametros.AppendLine();
            parametros.Append("{");
            parametros.AppendLine();
            parametros.Append("ID: ");
            parametros.Append(string.Format("\"{0}\",", pedido.Id));
            parametros.AppendLine();
            parametros.Append("Date: ");
            parametros.Append(string.Format("\"{0}\",", DateTime.Now));
            parametros.AppendLine();
            parametros.Append("Email: ");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Email));
            parametros.AppendLine();
            parametros.Append("TotalItems: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("TotalOrder: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("TotalShipping: ");
            parametros.Append(string.Format("\"{0}\",", pedido.Valor));
            parametros.AppendLine();
            parametros.Append("IP: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("Currency: \"USD\",");
            parametros.AppendLine();
            parametros.Append("Payments: ");
            parametros.AppendLine();
            parametros.Append("[");
            parametros.AppendLine();
            parametros.Append("{");
            parametros.AppendLine();
            parametros.Append("Date: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("Type: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("CardNumber: ");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.CartaoDeCredito.Numero));
            parametros.AppendLine();
            parametros.Append("CardHolderName: ");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.CartaoDeCredito.Nome));
            parametros.AppendLine();
            parametros.Append("CardExpirationDate: ");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.CartaoDeCredito.Validade));
            parametros.AppendLine();
            parametros.Append("Amount: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("PaymentTypeID: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("CardType: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("CardBin: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("}");
            parametros.AppendLine();
            parametros.Append("],");
            parametros.AppendLine();
            parametros.Append("BillingData: ");
            parametros.AppendLine();
            parametros.Append("{");
            parametros.AppendLine();
            parametros.Append("ID: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("Type: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("BirthDate: ");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Nascimento));
            parametros.AppendLine();
            parametros.Append("Gender: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("Name: ");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Nome));
            parametros.AppendLine();
            parametros.Append("Email: ");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Email));
            parametros.AppendLine();
            parametros.Append("Address: ");
            parametros.AppendLine();
            parametros.Append("{");
            parametros.AppendLine();
            parametros.Append("Street: ");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Endreco.Rua));
            parametros.AppendLine();
            parametros.Append("City: ");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Endreco.Cidade));
            parametros.AppendLine();
            parametros.Append("State: ");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Endreco.Estado));
            parametros.AppendLine();
            parametros.Append("Comp: ");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Endreco.Complemento));
            parametros.AppendLine();
            parametros.Append("ZipCode: ");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Endreco.CEP));
            parametros.AppendLine();
            parametros.Append("County: ");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Endreco.Pais));
            parametros.AppendLine();
            parametros.Append("Number: ");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Endreco.Numero));
            parametros.AppendLine();
            parametros.Append("},");
            parametros.AppendLine();
            parametros.Append("Phones: [");
            parametros.AppendLine();
            parametros.Append("{");
            parametros.AppendLine();
            parametros.Append("Type: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("CountryCode: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("AreaCode: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("Number: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("}");
            parametros.AppendLine();
            parametros.Append("]");
            parametros.AppendLine();
            parametros.Append("},");
            parametros.AppendLine();
            parametros.Append("ShippingData: ");
            parametros.AppendLine();
            parametros.Append("{");
            parametros.AppendLine();
            parametros.Append("ID: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("Type: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("Name: ");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Nome));
            parametros.AppendLine();
            parametros.Append("Gender: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("Email: ");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Email));
            parametros.AppendLine();
            parametros.Append("BirthDate: ");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Nascimento));
            parametros.AppendLine();
            parametros.Append("Address: ");
            parametros.AppendLine();
            parametros.Append("{");
            parametros.AppendLine();
            parametros.Append("Street: ");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Endreco.Rua));
            parametros.AppendLine();
            parametros.Append("City: ");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Endreco.Cidade));
            parametros.AppendLine();
            parametros.Append("State: ");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Endreco.Estado));
            parametros.AppendLine();
            parametros.Append("Comp: ");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Endreco.Complemento));
            parametros.AppendLine();
            parametros.Append("ZipCode: ");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Endreco.CEP));
            parametros.AppendLine();
            parametros.Append("County: ");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Endreco.Pais));
            parametros.AppendLine();
            parametros.Append("Number: ");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Endreco.Numero));
            parametros.AppendLine();
            parametros.Append("},");
            parametros.AppendLine();
            parametros.Append("Phones: [");
            parametros.AppendLine();
            parametros.Append("{");
            parametros.AppendLine();
            parametros.Append("Type: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("CountryCode: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("AreaCode: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("Number: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("}");
            parametros.AppendLine();
            parametros.Append("]");
            parametros.AppendLine();
            parametros.Append("},");
            parametros.AppendLine();
            parametros.Append("Items: [");
            parametros.AppendLine();
            parametros.Append("{");
            parametros.AppendLine();
            parametros.Append("ProductId: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("ProductTitle: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("Price: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("Category: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("Quantity: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("},");
            parametros.AppendLine();
            parametros.Append("{");
            parametros.AppendLine();
            parametros.Append("ProductId: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("ProductTitle: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("Price: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("Category: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("Quantity: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("}");
            parametros.AppendLine();
            parametros.Append("],");
            parametros.AppendLine();
            parametros.Append("SessionID: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("}");
            parametros.AppendLine();
            parametros.Append("],");
            parametros.AppendLine();
            parametros.Append("AnalysisLocation: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("Reanalysis: ");
            parametros.Append(string.Format("\"{0}\",", preencher));
            parametros.AppendLine();
            parametros.Append("}");

            string json = JsonFormatting.Ident(parametros.ToString());

            var client  = new RestClient("https://sandbox.clearsale.com.br/api/order/send");
            var request = new RestRequest(Method.POST);

            request.AddHeader("Postman-Token", "3d6e3cf9-d361-45eb-b53a-5a7d39c83736");
            request.AddHeader("Cache-Control", "no-cache");
            request.AddHeader("Content-Type", "application/json");
            request.AddParameter("application/json", parametros, ParameterType.RequestBody);
            IRestResponse response = client.Execute(request);

            //return response.Content;

            return("APA");
        }
コード例 #13
0
        public static string Serialize(string name, object obj, JsonFormatting format, int indentLevel, bool justValue = false)
        {
            string result = "";

            if (obj == null)
            {
                if (justValue)
                {
                    result += JsonWriter.WriteValue(obj, JsonKeyValueType.Null, format, indentLevel);
                }
                else
                {
                    result += JsonWriter.WriteKeyValuePair(name, obj, JsonKeyValueType.Null, format, indentLevel);
                }
            }

            else if (obj is bool)
            {
                if (justValue)
                {
                    result += JsonWriter.WriteValue(obj, JsonKeyValueType.Boolean, format, indentLevel);
                }
                else
                {
                    result += JsonWriter.WriteKeyValuePair(name, obj, JsonKeyValueType.Boolean, format, indentLevel);
                }
            }

            else if (obj is string)
            {
                if (justValue)
                {
                    result += JsonWriter.WriteValue(obj, JsonKeyValueType.Text, format, indentLevel);
                }
                else
                {
                    result += JsonWriter.WriteKeyValuePair(name, obj, JsonKeyValueType.Text, format, indentLevel);
                }
            }

            else if (obj is DateTime)
            {
                if (justValue)
                {
                    result += JsonWriter.WriteValue(obj, JsonKeyValueType.DateTime, format, indentLevel);
                }
                else
                {
                    result += JsonWriter.WriteKeyValuePair(name, obj, JsonKeyValueType.DateTime, format, indentLevel);
                }
            }

            else if (obj.IsNumericType())
            {
                if (justValue)
                {
                    result += JsonWriter.WriteValue(obj, JsonKeyValueType.Numerical, format, indentLevel);
                }
                else
                {
                    result += JsonWriter.WriteKeyValuePair(name, obj, JsonKeyValueType.Numerical, format, indentLevel);
                }
            }

            else if (obj.IsArray())
            {
                if (justValue)
                {
                    result += JsonWriter.WriteValue(obj, JsonKeyValueType.Array, format, indentLevel);
                }
                else
                {
                    result += JsonWriter.WriteKeyValuePair(name, obj, JsonKeyValueType.Array, format, indentLevel);
                }
            }

            else if (obj.IsDictionary())
            {
                if (justValue)
                {
                    result += JsonWriter.WriteValue(obj, JsonKeyValueType.Dictionary, format, indentLevel);
                }
                else
                {
                    result += JsonWriter.WriteKeyValuePair(name, obj, JsonKeyValueType.Dictionary, format, indentLevel);
                }
            }

            else if (obj is Bitmap)
            {
                if (justValue)
                {
                    result += JsonWriter.WriteValue(ImageToText.ConvertImageToText((Bitmap)obj, System.Drawing.Imaging.ImageFormat.Png), JsonKeyValueType.Text, format, indentLevel);
                }
                else
                {
                    result += JsonWriter.WriteKeyValuePair(name, ImageToText.ConvertImageToText((Bitmap)obj, System.Drawing.Imaging.ImageFormat.Png), JsonKeyValueType.Text, format, indentLevel);
                }
            }

            else if (obj is Image)
            {
                if (justValue)
                {
                    result += JsonWriter.WriteValue(ImageToText.ConvertImageToText((Image)obj, System.Drawing.Imaging.ImageFormat.Png), JsonKeyValueType.Text, format, indentLevel);
                }
                else
                {
                    result += JsonWriter.WriteKeyValuePair(name, ImageToText.ConvertImageToText((Image)obj, System.Drawing.Imaging.ImageFormat.Png), JsonKeyValueType.Text, format, indentLevel);
                }
            }

            else if (obj is Point)
            {
                if (justValue)
                {
                    result += JsonWriter.WriteValue(new PointConverter().ConvertToString(obj), JsonKeyValueType.Text, format, indentLevel);
                }
                else
                {
                    result += JsonWriter.WriteKeyValuePair(name, new PointConverter().ConvertToString(obj), JsonKeyValueType.Text, format, indentLevel);
                }
            }

            else if (obj is Size)
            {
                if (justValue)
                {
                    result += JsonWriter.WriteValue(new SizeConverter().ConvertToString(obj), JsonKeyValueType.Text, format, indentLevel);
                }
                else
                {
                    result += JsonWriter.WriteKeyValuePair(name, new SizeConverter().ConvertToString(obj), JsonKeyValueType.Text, format, indentLevel);
                }
            }

            else if (obj is Rectangle)
            {
                if (justValue)
                {
                    result += JsonWriter.WriteValue(new RectangleConverter().ConvertToString(obj), JsonKeyValueType.Text, format, indentLevel);
                }
                else
                {
                    result += JsonWriter.WriteKeyValuePair(name, new RectangleConverter().ConvertToString(obj), JsonKeyValueType.Text, format, indentLevel);
                }
            }

            else if (obj is Color)
            {
                if (justValue)
                {
                    result += JsonWriter.WriteValue(new ColorConverter().ConvertToString(obj), JsonKeyValueType.Text, format, indentLevel);
                }
                else
                {
                    result += JsonWriter.WriteKeyValuePair(name, new ColorConverter().ConvertToString(obj), JsonKeyValueType.Text, format, indentLevel);
                }
            }

            else if (obj is Font)
            {
                if (justValue)
                {
                    result += JsonWriter.WriteValue(new FontConverter().ConvertToString(obj), JsonKeyValueType.Text, format, indentLevel);
                }
                else
                {
                    result += JsonWriter.WriteKeyValuePair(name, new FontConverter().ConvertToString(obj), JsonKeyValueType.Text, format, indentLevel);
                }
            }

            else if (obj is char)
            {
                if (justValue)
                {
                    result += JsonWriter.WriteValue(new CharConverter().ConvertToString(obj), JsonKeyValueType.Text, format, indentLevel);
                }
                else
                {
                    result += JsonWriter.WriteKeyValuePair(name, new CharConverter().ConvertToString(obj), JsonKeyValueType.Text, format, indentLevel);
                }
            }

            else if (obj is Guid)
            {
                if (justValue)
                {
                    result += JsonWriter.WriteValue(new GuidConverter().ConvertToString(obj), JsonKeyValueType.Text, format, indentLevel);
                }
                else
                {
                    result += JsonWriter.WriteKeyValuePair(name, new GuidConverter().ConvertToString(obj), JsonKeyValueType.Text, format, indentLevel);
                }
            }

            else if (justValue)
            {
                result += JsonWriter.WriteValue(obj, JsonKeyValueType.Object, format, indentLevel);
            }
            else
            {
                result += JsonWriter.WriteKeyValuePair(name, obj, JsonKeyValueType.Object, format, indentLevel);
            }

            return(result);
        }
コード例 #14
0
        public async Task PublishThroughEventBusAsync(IntegrationEvent evt)
        {
            try
            {
                _logger.LogInformation("----- Publishing integration event: {IntegrationEventId_published} from {AppName} - ({@IntegrationEvent})", evt.Id, "POSIntegrationEventService", JsonFormatting.Formated(evt));

                await _eventLogService.MarkEventAsInProgressAsync(evt.Id);

                _eventBus.Publish(evt);
                await _eventLogService.MarkEventAsPublishedAsync(evt.Id);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "ERROR Publishing integration event: {IntegrationEventId} from {AppName} - ({@IntegrationEvent})", evt.Id, "POSIntegrationEventService", JsonFormatting.Formated(evt));
                //await _eventLogService.MarkEventAsFailedAsync(evt.Id);
            }
        }
コード例 #15
0
        public static ActionResult JsonJpathSched(Session session)
        {
            AssemblyName me = typeof(JsonJPath).Assembly.GetName();

            session.Log($"Initialized from {me.Name} v{me.Version}");

            List <JsonJPathCatalog> catalogs = new List <JsonJPathCatalog>();;

            using (View jsonView = session.Database.OpenView("SELECT `PSW_JsonJPath`.`File_`, `PSW_JsonJPath`.`Component_`, `PSW_JsonJPath`.`FilePath`, `PSW_JsonJPath`.`JPath`, `PSW_JsonJPath`.`Value`, `PSW_JsonJPath`.`Formatting`, `PSW_JsonJPath`.`ErrorHandling` FROM `PSW_JsonJPath`"))
            {
                jsonView.Execute(null);

                foreach (Record rec in jsonView)
                {
                    using (rec)
                    {
                        JsonJPathCatalog ctlg      = new JsonJPathCatalog();
                        string           fileId    = rec[1] as string;
                        string           component = rec[2] as string;
                        string           filePath  = rec[3] as string;
                        string           jpath     = rec[4] as string;
                        string           value     = rec[5] as string;
                        int?formatting             = rec[6] as int?;
                        int?errorHandling          = rec[7] as int?;
                        ctlg.JPathObfuscated = session.Obfuscate(jpath);
                        ctlg.ValueObfuscated = session.Obfuscate(value);
                        ctlg.JPath           = session.Format(jpath);
                        ctlg.Value           = session.Format(value);
                        bool isHidden = !ctlg.Value.Equals(ctlg.ValueObfuscated);

                        if ((formatting != null) && Enum.IsDefined(typeof(JsonFormatting), (int)formatting))
                        {
                            JsonFormatting jsonFormat = (JsonFormatting)formatting;
                            switch (jsonFormat)
                            {
                            default:
                                break;

                            case JsonFormatting.String:
                                ctlg.Value = JsonConvert.ToString(ctlg.Value);
                                break;

                            case JsonFormatting.Boolean:
                                if (string.IsNullOrWhiteSpace(ctlg.Value))
                                {
                                    ctlg.Value = JsonConvert.False;
                                }
                                else if (bool.TryParse(ctlg.Value, out bool b))
                                {
                                    ctlg.Value = b ? JsonConvert.True : JsonConvert.False;
                                }
                                else if (int.TryParse(ctlg.Value, out int i) && (i == 0))
                                {
                                    ctlg.Value = JsonConvert.False;
                                }
                                else
                                {
                                    ctlg.Value = JsonConvert.True;
                                }
                                break;
                            }
                            if (!isHidden)
                            {
                                ctlg.ValueObfuscated = ctlg.Value;
                            }
                        }

                        // Sanity checks
                        if (string.IsNullOrWhiteSpace(component))
                        {
                            session.Log("Component must be supplied");
                            return(ActionResult.Failure);
                        }
                        if (string.IsNullOrWhiteSpace(fileId) == string.IsNullOrEmpty(filePath))
                        {
                            session.Log("Either File_ or FilePath must be supplied");
                            return(ActionResult.Failure);
                        }

                        if (string.IsNullOrEmpty(fileId))
                        {
                            ctlg.FilePath = session.Format(filePath);
                        }
                        else // Get component by file Id
                        {
                            ctlg.FilePath = session.Format($"[#{fileId}]");
                        }

                        if (errorHandling != null)
                        {
                            ctlg.ErrorHandling = (ErrorHandling)errorHandling;
                        }

                        ComponentInfo ci = session.Components[component];
                        if (ci == null)
                        {
                            session.Log($"Component '{component}' not present in package");
                            return(ActionResult.Failure);
                        }
                        // Path will be empty if component is not scheduled to do anything. We'll check that only if action is relevant.

                        switch (ci.RequestState)
                        {
                        case InstallState.Default:
                        case InstallState.Local:
                        case InstallState.Source:
                            if (string.IsNullOrWhiteSpace(ctlg.FilePath))
                            {
                                session.Log("Can't get target path for file");
                                return(ActionResult.Failure);
                            }

                            session.LogUnformatted($"Will replace JSON token matching JPath '{ctlg.JPathObfuscated}' with '{ctlg.ValueObfuscated}' in file '{ctlg.FilePath}'");
                            catalogs.Add(ctlg);
                            break;

                        default:
                            session.Log($"Component '{ci.Name}' action isn't install, or repair. Skipping JPath");
                            continue;
                        }
                    }
                }
            }

            if (catalogs.Count > 0)
            {
                XmlSerializer srlz = new XmlSerializer(catalogs.GetType());
                using (StringWriter sw = new StringWriter())
                {
                    srlz.Serialize(sw, catalogs);
                    session["JsonJpathExec"] = sw.ToString();
                    session.DoAction("JsonJpathExec");
                }
            }

            return(ActionResult.Success);
        }
コード例 #16
0
        public string CartaoDeCredito(Pedido pedido)
        {
            StringBuilder parametros = new StringBuilder();

            string aqui = "AQUI";

            parametros.Append("{");
            parametros.AppendLine();
            parametros.Append("\"MerchantOrderId\":");
            parametros.Append(string.Format("\"{0}\",", pedido.TokenLoja));
            parametros.AppendLine();
            parametros.Append("\"Customer\":{");
            parametros.AppendLine();
            parametros.Append("\"Name\":");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Nome));
            parametros.AppendLine();
            parametros.Append("\"Identity\":");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.CPF));
            parametros.AppendLine();
            parametros.Append("\"IdentityType\":\"CPF\",");
            parametros.AppendLine();
            parametros.Append("\"Email\":");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Email));
            parametros.AppendLine();
            parametros.Append("\"Birthdate\":");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Nascimento));
            parametros.AppendLine();
            parametros.Append("\"Address\":{");
            parametros.AppendLine();
            parametros.Append("\"Street\":");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Endreco.Rua));
            parametros.AppendLine();
            parametros.Append("\"Number\":");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Endreco.Numero));
            parametros.AppendLine();
            parametros.Append("\"Complement\":");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Endreco.Complemento));
            parametros.AppendLine();
            parametros.Append("\"ZipCode\":");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Endreco.CEP));
            parametros.AppendLine();
            parametros.Append("\"City\":");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Endreco.Cidade));
            parametros.AppendLine();
            parametros.Append("\"State\":");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Endreco.Estado));
            parametros.AppendLine();
            parametros.Append("\"Country\":");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.Endreco.Pais));
            parametros.AppendLine();
            parametros.Append("},");
            parametros.AppendLine();
            parametros.Append("\"DeliveryAddress\": {");
            parametros.AppendLine();
            parametros.Append("\"Street\":");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.EnderecoCobranca.Rua));
            parametros.AppendLine();
            parametros.Append("\"Number\":");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.EnderecoCobranca.Numero));
            parametros.AppendLine();
            parametros.Append("\"Complement\":");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.EnderecoCobranca.Complemento));
            parametros.AppendLine();
            parametros.Append("\"ZipCode\":");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.EnderecoCobranca.CEP));
            parametros.AppendLine();
            parametros.Append("\"City\":");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.EnderecoCobranca.Cidade));
            parametros.AppendLine();
            parametros.Append("\"State\":");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.EnderecoCobranca.Estado));
            parametros.AppendLine();
            parametros.Append("\"Country\":");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.EnderecoCobranca.Pais));
            parametros.AppendLine();
            parametros.Append("}");
            parametros.AppendLine();
            parametros.Append("},");
            parametros.AppendLine();
            parametros.Append("\"Payment\":{ ");
            parametros.AppendLine();
            parametros.Append("\"Type\":\"CreditCard\",");
            parametros.AppendLine();
            parametros.Append("\"Amount\":");
            parametros.Append(string.Format("\"{0}\",", pedido.Valor));
            parametros.AppendLine();
            parametros.Append("\"Currency\":\"BRL\",");
            parametros.AppendLine();
            parametros.Append("\"Country\":\"BRA\",");
            parametros.AppendLine();
            parametros.Append("\"Provider\":\"Simulado\",");
            parametros.AppendLine();
            parametros.Append("\"ServiceTaxAmount\":0,");
            parametros.AppendLine();
            parametros.Append("\"Installments\":1,");
            parametros.AppendLine();
            parametros.Append("\"Interest\":\"ByMerchant\",");
            parametros.AppendLine();
            parametros.Append("\"Capture\":false,");
            parametros.AppendLine();
            parametros.Append("\"Authenticate\":false,");
            parametros.AppendLine();
            parametros.Append("\"Recurrent\": false,");
            parametros.AppendLine();
            parametros.Append("\"SoftDescriptor\":\"123456789ABCD\",");
            parametros.AppendLine();
            parametros.Append("\"CreditCard\":{");
            parametros.AppendLine();
            parametros.Append("\"CardNumber\":");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.CartaoDeCredito.Numero));
            parametros.AppendLine();
            parametros.Append("\"Holder\":");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.CartaoDeCredito.Nome));
            parametros.AppendLine();
            parametros.Append("\"ExpirationDate\":");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.CartaoDeCredito.Validade));
            parametros.AppendLine();
            parametros.Append("\"SecurityCode\":");
            parametros.Append(string.Format("\"{0}\",", pedido.Cliente.CartaoDeCredito.CodigoSeguranca));
            parametros.AppendLine();
            parametros.Append("\"SaveCard\":\"false\",");
            parametros.AppendLine();
            parametros.Append("\"Brand\":");
            parametros.Append(string.Format("\"{0}\"", pedido.Cliente.CartaoDeCredito.Bandeira));
            parametros.AppendLine();
            parametros.Append("}");
            parametros.AppendLine();
            parametros.Append("}");
            parametros.AppendLine();
            parametros.Append("}");

            string json = JsonFormatting.Ident(parametros.ToString());

            var client  = new RestClient("http:///%7B%7BapiUrl%7D%7D/1/sales");
            var request = new RestRequest(Method.POST);

            request.AddHeader("postman-token", "87b55406-11be-463c-e8b6-d5cea97c8886");
            request.AddHeader("cache-control", "no-cache");
            request.AddHeader("merchantkey", "{{" + pedido.TokenLoja + "}}");
            request.AddHeader("merchantid", "{{" + pedido.TokenLoja + "}}");
            request.AddHeader("content-type", "application/json");
            request.AddParameter("application/json", parametros, ParameterType.RequestBody);
            //IRestResponse response = client.Execute(request);

            //return response.Content;

            return(CreditCardTransactionStatusEnum.AuthorizedPendingCapture.ToString());
        }
コード例 #17
0
        public static string ConvertObjectToJson(object obj, JsonFormatting format = JsonFormatting.Indented, int identationLevel = 1)
        {
            string result = "";

            #region WIP
            // Check if it is a type that needs to be serialized into a string and not any other way, and if so, serialize it the primitive way!

            //bool StringSerialize = false; // Whether it will be serialized to a string or object (String = "", Object = {})
            //IConvertible convertible = obj as IConvertible;

            //TypeCode typCode = convertible.GetTypeCode();

            //string convertedValue = (string)convertible.ToType(typeof(string), CultureInfo.InvariantCulture);
            // If it is an "object" then go ahead and put it into a string.
            #endregion

            if (format == JsonFormatting.Compact)
            {
                result = "{";
            }
            else if (format == JsonFormatting.CompactReadable)
            {
                result = "{ ";
            }
            else if (format == JsonFormatting.Indented)
            {
                result = $"{{{Environment.NewLine}";
            }

            var bindingFlags = BindingFlags.Instance |
                               BindingFlags.NonPublic |
                               BindingFlags.Public;

            var fieldNames = obj.GetType().GetFields(bindingFlags)
                             .Select(field => field.Name)
                             .ToList();

            var fieldValues = obj.GetType()
                              .GetFields(bindingFlags)
                              .Select(field => field.GetValue(obj))
                              .ToList();


            for (int a = 0; a < fieldNames.Count; a++)
            {
                if (fieldNames[a].StartsWith("<"))
                {
                    fieldNames[a] = fieldNames[a].Split('<')[1].Split('>')[0];
                }
            }

            int i = 0;
            foreach (string fieldName in fieldNames)
            {
                bool serialize = true;

                try
                {
                    var pi = obj.GetType().GetField(fieldName);
                    if (Attribute.IsDefined(pi, typeof(ABJsonIgnore)))
                    {
                        serialize = false;
                    }
                } catch { }

                if (serialize)
                {
                    if (format == JsonFormatting.Indented)
                    {
                        result += JsonWriter.Indent(JsonSerializer.Serialize(fieldName, fieldValues[i], format, identationLevel), identationLevel);
                    }
                    else
                    {
                        result += JsonSerializer.Serialize(fieldName, fieldValues[i], format, identationLevel);
                    }
                }

                i++;
            }

            result = result.TrimEnd().TrimEnd(',');

            if (format == JsonFormatting.Compact)
            {
                result += "}";
            }
            else if (format == JsonFormatting.CompactReadable)
            {
                result += " }";
            }
            else if (format == JsonFormatting.Indented)
            {
                result += $"{Environment.NewLine}}}";
            }

            return(result);
        }
コード例 #18
0
 public HttpHandlerBuilder SetJsonFormatting(JsonFormatting jsonFormatting)
 {
     _rootHandler.JsonFormatting = jsonFormatting;
     return(this);
 }
コード例 #19
0
        public static string WriteKeyValuePair(string name, object obj, JsonKeyValueType type, JsonFormatting format, int indent)
        {
            string result = "";

            if (format == JsonFormatting.Compact)
                result = WriteName(name, format) + ":" + WriteValue(obj, type, format, indent);
            else if (format == JsonFormatting.CompactReadable)
                result = WriteName(name, format) + ": " + WriteValue(obj, type, format, indent);
            else if (format == JsonFormatting.Indented)
                result = WriteName(name, format) + ": " + WriteValue(obj, type, format, indent);

            return result;
        }
コード例 #20
0
        public static string WriteValue(object obj, JsonKeyValueType type, JsonFormatting format, int indent)
        {
            string result = "";

            switch (type)
            {
                case JsonKeyValueType.Text:
                    if (format == JsonFormatting.Compact)
                        result += "\"" + obj.ToString() + "\",";
                    else if (format == JsonFormatting.CompactReadable)
                        result += "\"" + obj.ToString() + "\", ";
                    else if (format == JsonFormatting.Indented)
                        result += "\"" + obj.ToString() + $"\",{Environment.NewLine}";

                    break;
                case JsonKeyValueType.DateTime:
                    if (format == JsonFormatting.Compact)
                        result += "\"" + JsonSerializer.SerializeDateTime((DateTime)obj) + "\",";
                    else if (format == JsonFormatting.CompactReadable)
                        result += "\"" + JsonSerializer.SerializeDateTime((DateTime)obj) + "\", ";
                    else if (format == JsonFormatting.Indented)
                        result += "\"" + JsonSerializer.SerializeDateTime((DateTime)obj) + $"\",{Environment.NewLine}";

                    break;
                case JsonKeyValueType.Boolean:
                case JsonKeyValueType.Numerical:
                    if (format == JsonFormatting.Compact)
                        result += obj.ToString().ToLower() + ",";
                    else if (format == JsonFormatting.CompactReadable)
                        result += obj.ToString().ToLower() + ", ";
                    else if (format == JsonFormatting.Indented)
                        result += obj.ToString().ToLower() + $",{Environment.NewLine}";

                    break;
                case JsonKeyValueType.Null:
                    if (format == JsonFormatting.Compact)
                        result += "null,";
                    else if (format == JsonFormatting.CompactReadable)
                        result += "null, ";
                    else if (format == JsonFormatting.Indented)
                        result += $"null, {Environment.NewLine}";

                    break;
                case JsonKeyValueType.Array:
                    if (format == JsonFormatting.Compact)
                        if (obj.GetType().IsArray) result += "[" + JsonSerializer.SerializeArray(((dynamic)obj), format, indent + 1) + "],"; else result += "[" + JsonSerializer.SerializeArray(((dynamic)obj).ToArray(), format, indent + 1) + "],";
                    else if (format == JsonFormatting.CompactReadable)
                        if (obj.GetType().IsArray) result += "[" + JsonSerializer.SerializeArray(((dynamic)obj), format, indent + 1) + "], "; else result += "[" + JsonSerializer.SerializeArray(((dynamic)obj).ToArray(), format, indent + 1) + "], ";
                    else if (format == JsonFormatting.Indented)
                        if (obj.GetType().IsArray) result += $"[{Environment.NewLine}" + JsonSerializer.SerializeArray(((dynamic)obj), format, indent + 1) + "],"; else result += $"[{Environment.NewLine}" + JsonSerializer.SerializeArray(((dynamic)obj).ToArray(), format, indent + 1) + $"],{Environment.NewLine}";

                    break;
                case JsonKeyValueType.Dictionary:
                    if (format == JsonFormatting.Compact)
                        result += "{" + JsonSerializer.SerializeDictionary(((dynamic)obj), format, indent + 1) + "},";
                    else if (format == JsonFormatting.CompactReadable)
                        result += "{" + JsonSerializer.SerializeDictionary(((dynamic)obj), format, indent + 1) + "}, ";
                    else if (format == JsonFormatting.Indented)
                        result += $"{{{Environment.NewLine}" + JsonSerializer.SerializeDictionary(((dynamic)obj), format, indent + 1) + $"}},{Environment.NewLine}";

                    break;
                case JsonKeyValueType.Object:
                    if (format == JsonFormatting.Compact)
                        result += JsonClassConverter.ConvertObjectToJson(obj, format, indent + 1) + ",";
                    else if (format == JsonFormatting.CompactReadable)
                        result += JsonClassConverter.ConvertObjectToJson(obj, format, indent + 1) + ", ";
                    else if (format == JsonFormatting.Indented)
                        result += JsonClassConverter.ConvertObjectToJson(obj, format, indent + 1) + $",{Environment.NewLine}";

                    break;                   
            }
            return result;
        }
コード例 #21
0
 /// <summary>
 /// Initializes a new instance of the <see cref="JsonLogFormatter" /> class with the specified formatting options.
 /// </summary>
 /// <param name="formatting">The formatting options.</param>
 public JsonLogFormatter(JsonFormatting formatting)
 {
     this.Formatting = formatting;
 }
コード例 #22
0
 public static string JsonSerializer <T>(T t, JsonFormatting formatting, params Converter[] converters)
 {
     return(JsonConvert.SerializeObject(t, (Formatting)formatting, converters));
 }
コード例 #23
0
        public override ValidationResult Validate(string json)
        {
            try
            {
                var resultadoDoParse = JSchema.Parse(json);
            }
            catch (JsonReaderException ex)
            {
                var lineNumber   = ex.LineNumber;
                var linePosition = ex.LinePosition;

                textBox2.Text = string.Format("JSON inválido na linha {0} e na coluna {1}.", lineNumber, linePosition);

                return;
            }

            var parseObj = JObject.Parse(json);

            IList <ValidationError> errors;

            var valid = parseObj.IsValid(notaFiscalSelecionada.schema, out errors);

            if (valid)
            {
                string formatted = JsonFormatting.Ident(jsonRecebido);
                textBox2.Text = "JSON Válido";
                textBox1.Text = formatted.ToString();
            }
            else
            {
                var strBuilder = new StringBuilder();

                foreach (var error in errors)
                {
                    if (error.ErrorType == ErrorType.Type)
                    {
                        strBuilder.AppendLine(string.Format("Erro no campo {0} esperando {1} e veio {2} na linha {3} na coluna {4}",
                                                            error.Path,
                                                            error.Schema.Type.Value.ToString(),
                                                            error.Value != null ? error.Value.GetType().ToString() : "null",
                                                            error.LineNumber,
                                                            error.LinePosition));
                    }
                    else if (error.ErrorType == ErrorType.Required)
                    {
                        var campos = string.Join(",", ((IList <string>)error.Value));

                        if (string.IsNullOrEmpty(error.Path))
                        {
                            strBuilder.AppendLine(string.Format("Campo {0} obrigatório na raiz", campos));
                        }
                        else
                        {
                            strBuilder.AppendLine(string.Format("Campo {0} obrigatório dentro de {1}", campos, error.Path));
                        }
                    }
                }

                textBox2.Text = strBuilder.ToString();
            }
        }
コード例 #24
0
 public static string JsonSerializer <T>(T t, Type type, JsonFormatting formatting, SerializerSettings settings)
 {
     return(JsonConvert.SerializeObject(t, type, (Formatting)formatting, settings));
 }
コード例 #25
0
        public JsonFormattingTests()
        {
            var logger = new Mock <ILogger <JsonFormatting> >();

            _formatting = new JsonFormatting(logger.Object);
        }
コード例 #26
0
        public async Task <TResponse> Handle(TRequest request, CancellationToken cancellationToken, RequestHandlerDelegate <TResponse> next)
        {
            var response = default(TResponse);
            var typeName = request.GetGenericTypeName();

            try
            {
                if (_dbContext.HasActiveTransaction)
                {
                    return(await next());
                }

                var strategy = _dbContext.Database.CreateExecutionStrategy();

                await strategy.ExecuteAsync(async() =>
                {
                    Guid transactionId;

                    using (var transaction = await _dbContext.BeginTransactionAsync())
                        using (LogContext.PushProperty("TransactionContext", transaction))
                        {
                            _logger.LogInformation("----- Begin transaction {TransactionId} for {CommandName} ({@Command})", transaction.TransactionId, typeName, JsonFormatting.Formated(request));

                            response = await next();

                            _logger.LogInformation("----- Commit transaction {TransactionId} for {CommandName}", transaction.TransactionId, typeName);

                            await _dbContext.CommitTransactionAsync(transaction);

                            transactionId = transaction.TransactionId;
                        }

                    await _posServiceIntegrationEventService.PublishEventsThroughEventBusAsync(transactionId);
                });

                return(response);
            }
            catch (Exception ex)
            {
                _logger.LogError(ex, "ERROR Handling transaction for {CommandName} ({@Command})", typeName, request);

                throw;
            }
        }