Ein flexibles Serialisierungs-/Deserialisierungs-„Protokoll“, bei dem der Eigenschaftsname weggelassen werden kann?C#

Ein Treffpunkt für C#-Programmierer
Guest
 Ein flexibles Serialisierungs-/Deserialisierungs-„Protokoll“, bei dem der Eigenschaftsname weggelassen werden kann?

Post by Guest »

Ich möchte meine JSON-Antwort für große API-Aufrufe verkleinern.
Ich weiß, dass es MessagePack gibt, das dafür verwendet werden kann. Aber es gibt einige Nachteile, mit denen ich mich lieber nicht befassen würde.
In den meisten meiner Anwendungsfälle ist die Hälfte(+) der Daten der Schlüsselname, der für jede Eigenschaft wiederholt wird.
Also habe ich mich gefragt, ob es ein Serialisierungs-/Deserialisierungs-„Protokoll“ gibt, das den Eigenschaftsnamen weglassen kann und ob es die Daten und sein Ereignis besser komprimieren kann! Idealerweise in c#.
Vielleicht durch Angabe eines Kontexts/Schemas für die Antwort selbst, damit sie auf dem Client einfacher/flexibler analysiert werden kann?
Ich habe ein Dummy-Beispiel, bei dem es sich um einen API-Aufruf handelt, der 100.000 Autos und ca. 425.000 Räder zurückgibt und der von der OpenAPI-Spezifikation inspiriert ist. Überprüfen Sie die Eigenschaft „data“ in JSON unten.

Code: Select all

//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}
]
}

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post