Гибкий «протокол» сериализации/десериализации, в котором можно опускать имя свойства?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Гибкий «протокол» сериализации/десериализации, в котором можно опускать имя свойства?

Сообщение Anonymous »

Я хотел бы уменьшить ответ 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»