Я хотел бы уменьшить ответ json для большого вызова API.
Я знаю, что для этого можно использовать MessagePack. Но есть один недостаток, с которым я бы предпочел не иметь дело.
В большинстве моих случаев использования половина (+) данных — это имя ключа, которое повторяется для каждого свойства.
/>Итак, мне было интересно, существует ли «протокол» сериализации/десериализации, который может опускать имя свойства, и может ли он лучше сжимать данные в виде события! В идеале на C#.
Может быть, предоставив контекст/схему самого ответа, чтобы его можно было более легко и гибко анализировать на клиенте?
У меня есть фиктивный пример, который представляет собой вызов API, который возвращает 100 000 автомобилей и ~425 000 колес, и он вдохновлен спецификацией OpenAPI. Проверьте свойство «data» в формате JSON ниже.
//C# Class
public class Car
{
public int Year { get; set; }
public string Model { get; set; }
public List Wheels { get; set; }
}
public class Wheel
{
public double Diameter { get; set;}
public string TireSize { get; set; }
public string BoltPattern { get; set; }
}
//here is the fictive/wanted response that i would like to received and parse ... I've inspire the json response based on OpenAPI spec, but... could be anything!
{
"responseDataType": {//Property always there to tell that type is under the "data" property
"type": "array",
"items": {
"$ref": "#/schemas/Car"
}
},
"schemas": {//Template/type of the "data" property
"Car": {
"type": "object",
"properties": {
"year": {
"type": "integer",
},
"model": {
"type": "string",
},
"wheels": {
"type": "array",
"items": {
"$ref": "#/schemas/Wheel"
},
}
},
},
"Wheel": {
"type": "object",
"properties": {
"diameter": {
"type": "number",
},
"tireSize": {
"type": "string",
},
"boltPattern": {
"type": "string",
}
},
}
}
"data":[
{99 998 more rows...},
//As you can see the key are not repeated.
//But Deserializer would be parsing according to the provided "schemas"/"responseDataType".
//Could also be not indented to save more KB, zipped?
{
2000,
"Toyota",
[
{16,"275/40r16","4x100"},
{16,"275/40r16","4x100"},
{16,"275/40r16","4x100"},
{16,"275/40r16","4x100"}
]
},
{
2005,
"Jeep",
[
{17,"33x12.5","5x127"},
{17,"33x12.5","5x127"},
{17,"33x12.5","5x127"},
{17,"33x12.5","5x127"},
{17,"33x12.5","5x127"}
]
},
{...99 998 more rows}
]
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... perty-name
Гибкий «протокол» сериализации/десериализации, в котором можно опускать имя свойства? ⇐ C#
Место общения программистов C#
1735586644
Anonymous
Я хотел бы уменьшить ответ json для большого вызова API.
Я знаю, что для этого можно использовать MessagePack. Но есть один недостаток, с которым я бы предпочел не иметь дело.
[b]В большинстве моих случаев использования половина (+) данных — это имя ключа, которое повторяется для каждого свойства[/b].
/>Итак, мне было интересно, существует ли «протокол» сериализации/десериализации, который может опускать имя свойства, и может ли он лучше сжимать данные в виде события! [b]В идеале на C#[/b].
Может быть, предоставив контекст/схему самого ответа, чтобы его можно было более легко и гибко анализировать на клиенте?
У меня есть фиктивный пример, который представляет собой вызов API, который возвращает 100 000 автомобилей и ~425 000 колес, и он вдохновлен спецификацией OpenAPI. Проверьте свойство «data» в формате JSON ниже.
//C# Class
public class Car
{
public int Year { get; set; }
public string Model { get; set; }
public List Wheels { get; set; }
}
public class Wheel
{
public double Diameter { get; set;}
public string TireSize { get; set; }
public string BoltPattern { get; set; }
}
//here is the fictive/wanted response that i would like to received and parse ... I've inspire the json response based on OpenAPI spec, but... could be anything!
{
"responseDataType": {//Property always there to tell that type is under the "data" property
"type": "array",
"items": {
"$ref": "#/schemas/Car"
}
},
"schemas": {//Template/type of the "data" property
"Car": {
"type": "object",
"properties": {
"year": {
"type": "integer",
},
"model": {
"type": "string",
},
"wheels": {
"type": "array",
"items": {
"$ref": "#/schemas/Wheel"
},
}
},
},
"Wheel": {
"type": "object",
"properties": {
"diameter": {
"type": "number",
},
"tireSize": {
"type": "string",
},
"boltPattern": {
"type": "string",
}
},
}
}
"data":[
{99 998 more rows...},
//As you can see the key are not repeated.
//But Deserializer would be parsing according to the provided "schemas"/"responseDataType".
//Could also be not indented to save more KB, zipped?
{
2000,
"Toyota",
[
{16,"275/40r16","4x100"},
{16,"275/40r16","4x100"},
{16,"275/40r16","4x100"},
{16,"275/40r16","4x100"}
]
},
{
2005,
"Jeep",
[
{17,"33x12.5","5x127"},
{17,"33x12.5","5x127"},
{17,"33x12.5","5x127"},
{17,"33x12.5","5x127"},
{17,"33x12.5","5x127"}
]
},
{...99 998 more rows}
]
}
Подробнее здесь: [url]https://stackoverflow.com/questions/79318147/a-flexible-serialisation-deserialisation-protocol-that-can-omit-property-name[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия