JsonConvert.Serialize автоматически сжимает мою строку, или я должен использовать Gzip? - PullRequest
0 голосов

Я использую Newtosoft. Json Библиотека. Вот пример моего класса.

 public class TableItemsClass
{
    public int InventoryTransTempID { get; set; }
    public string Description { get; set; }
    public string Extras { get; set; }
    public decimal Quantity { get; set; }
    public decimal ItemPrice { get; set; }
    public decimal TotalPrice { get; set; }
    public decimal SumPrice { get; set; }
    public decimal SumDisPrice { get; set; }
    public int Situation { get; set; }
    public string TemporaryText { get; set; } 
    public bool TableIsClosed { get; set; }
    public decimal KitchenQuantity { get; set; }
    public string KitchenTime { get; set; }
    public int InventoryItemID { get; set; }
}

Я отправляю свои данные через http-клиент. Поэтому я использую функцию.

 var jsonString1 = JsonConvert.SerializeObject(mItems);

Итак, мой вопрос, стоит ли высокая производительность и скорость для использования GZip после сериализации моей строки? Или json автоматически сжимает мою строку при отправке запроса через http-клиент?

 var client = new HttpClient();
 await client.PostAsync("https://www.ddd.com",new StringContent( jsonString1,Encoding.UTF8,"application/json"));

Стоит ли использовать пример GZip

  var jsonString1 = Zip(JsonConvert.SerializeObject(mItems));

  public static void CopyTo(Stream src, Stream dest)
    {
        byte[] bytes = new byte[4096];

        int cnt;

        while ((cnt = src.Read(bytes, 0, bytes.Length)) != 0)
        {
            dest.Write(bytes, 0, cnt);
        }
    }
    public static byte[] Zip(string str)
    {
        var bytes = Encoding.UTF8.GetBytes(str);

        using (var msi = new MemoryStream(bytes))
        using (var mso = new MemoryStream())
        {
            using (var gs = new GZipStream(mso, CompressionMode.Compress))
            {
                //msi.CopyTo(gs);
                CopyTo(msi, gs);
            }

            return mso.ToArray();
        }
    }

Также есть ли способ удалить повторяющиеся значения ключа foreach свойство? Для перерисовки длины моей строки?

1 Ответ

1 голос
/ 15 марта 2020

Json - это просто текст, отформатированный соответствующим образом, чтобы он не сжимался сам по себе, поэтому да, используйте gzip, но не в бэкэнде, а в конфигурации веб-сервера. Вы должны отправлять текст клиенту, а не байтовый массив.

Если у вас есть другой вопрос о дубликатах ключей, вы должны отфильтровать их при запросе к базе данных, но вы можете сделать это с помощью linq на бэкенде:

List<TableItemsClass> items = getdata();
List<TableItemsClass> distinctTtems = items.Distinct().ToList();

Однако, чтобы это работало, вы должны переопределить средство сравнения равенства в вашем TableitemsClass.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...