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.
//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}
]
}
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. [b]In den meisten meiner Anwendungsfälle ist die Hälfte(+) der Daten der Schlüsselname, der für jede Eigenschaft wiederholt wird[/b]. 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! [b]Idealerweise in c#[/b]. 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]//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} ] } [/code]
Ich habe eine Online-Seite mit einer Reihe von Symbolen, die in vordefinierten Spalten angezeigt werden.
Einige der Symbole werden aufgrund der Berechtigungsebene der Administratorperson, die auf die...
Ich arbeite an der Erstellung eines Programms zum Herstellen einer Verbindung zu Google Mail mit dem IMAP-Protokoll und verwende den oauth2-Mechanismus zur Authentifizierung.
Ich konnte erfolgreich...
Ich versuche, eine URL mit einer GET -Anforderung mit RastTemplate zu treffen. Es gibt eine Ausnahme, in der das HTTP -Protokoll nicht unterstützt wird. Aber ich kann dies nicht mit der REST -Vorlage...
Bei der Kompilie einer C ++ -Anwendung oder Bibliothek mit Optimierungen, wie -O3 für GCC, gibt es eine Möglichkeit, die angewendeten Optimierungen aufzulisten? Ich meine, ohne den tatsächlichen Byte...
Aus unbekanntem Grund kann das OpenGL-GLSL-Shader-Programm nicht korrekt verlinkt werden, das Protokoll ist leer. Shader wurden korrekt kompiliert.
Versuche:
CompileShaders( Data/Shaders/ui , 0b01,...