Я хотел бы уменьшить ответ 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#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Гибкий «протокол» сериализации/десериализации, в котором можно опускать имя свойства?
Anonymous » » в форуме C# - 0 Ответы
- 8 Просмотры
-
Последнее сообщение Anonymous
-