[C#] add ObjectAPI Serialization Utility (#5785)

* [C#] add ObjectAPI Serialization Utility

* set InitialBufferSize to 64k

* rename SerializeToFlatBuffers to SerializeToBinary
This commit is contained in:
Wouter van Oortmerssen 2020-03-05 09:33:22 -08:00 committed by GitHub
parent 4749e77b0e
commit 7c37abe92d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 57 additions and 0 deletions

View File

@ -1990,6 +1990,19 @@ class CSharpGenerator : public BaseGenerator {
"Newtonsoft.Json.Formatting.Indented);\n"; "Newtonsoft.Json.Formatting.Indented);\n";
code += " }\n"; code += " }\n";
} }
if (parser_.root_struct_def_ == &struct_def) {
code += " public static " + class_name +
" DeserializeFromBinary(byte[] fbBuffer) {\n";
code += " return " + struct_def.name + ".GetRootAs" + struct_def.name +
"(new ByteBuffer(fbBuffer)).UnPack();\n";
code += " }\n";
code += " public byte[] SerializeToBinary() {\n";
code += " var fbb = new FlatBufferBuilder(0x10000);\n";
code +=
" fbb.Finish(" + struct_def.name + ".Pack(fbb, this).Value);\n";
code += " return fbb.DataBuffer.ToSizedArray();\n";
code += " }\n";
}
code += "}\n\n"; code += "}\n\n";
} }

View File

@ -673,6 +673,10 @@ namespace FlatBuffers.Test
var jsonText = b.SerializeToJson(); var jsonText = b.SerializeToJson();
var d = MonsterT.DeserializeFromJson(jsonText); var d = MonsterT.DeserializeFromJson(jsonText);
AreEqual(a, d); AreEqual(a, d);
var fbBuffer = b.SerializeToBinary();
var e = MonsterT.DeserializeFromBinary(fbBuffer);
AreEqual(a, e);
} }
private void AreEqual(ArrayTable a, ArrayTableT b) private void AreEqual(ArrayTable a, ArrayTableT b)
@ -772,6 +776,10 @@ namespace FlatBuffers.Test
var jsonText = b.SerializeToJson(); var jsonText = b.SerializeToJson();
var d = ArrayTableT.DeserializeFromJson(jsonText); var d = ArrayTableT.DeserializeFromJson(jsonText);
AreEqual(a, d); AreEqual(a, d);
var fbBuffer = b.SerializeToBinary();
var e = ArrayTableT.DeserializeFromBinary(fbBuffer);
AreEqual(a, e);
} }
private void AreEqual(Movie a, MovieT b) private void AreEqual(Movie a, MovieT b)
@ -815,6 +823,10 @@ namespace FlatBuffers.Test
var jsonText = b.SerializeToJson(); var jsonText = b.SerializeToJson();
var d = MovieT.DeserializeFromJson(jsonText); var d = MovieT.DeserializeFromJson(jsonText);
AreEqual(a, d); AreEqual(a, d);
var fbBuffer = b.SerializeToBinary();
var e = MovieT.DeserializeFromBinary(fbBuffer);
AreEqual(a, e);
} }
} }
} }

View File

@ -61,6 +61,14 @@ public class ArrayTableT
public string SerializeToJson() { public string SerializeToJson() {
return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented); return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
} }
public static ArrayTableT DeserializeFromBinary(byte[] fbBuffer) {
return ArrayTable.GetRootAsArrayTable(new ByteBuffer(fbBuffer)).UnPack();
}
public byte[] SerializeToBinary() {
var fbb = new FlatBufferBuilder(0x10000);
fbb.Finish(ArrayTable.Pack(fbb, this).Value);
return fbb.DataBuffer.ToSizedArray();
}
} }

View File

@ -785,6 +785,14 @@ public class MonsterT
public string SerializeToJson() { public string SerializeToJson() {
return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented); return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
} }
public static MonsterT DeserializeFromBinary(byte[] fbBuffer) {
return Monster.GetRootAsMonster(new ByteBuffer(fbBuffer)).UnPack();
}
public byte[] SerializeToBinary() {
var fbb = new FlatBufferBuilder(0x10000);
fbb.Finish(Monster.Pack(fbb, this).Value);
return fbb.DataBuffer.ToSizedArray();
}
} }

View File

@ -191,6 +191,14 @@ public class MonsterExtraT
public string SerializeToJson() { public string SerializeToJson() {
return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented); return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
} }
public static MonsterExtraT DeserializeFromBinary(byte[] fbBuffer) {
return MonsterExtra.GetRootAsMonsterExtra(new ByteBuffer(fbBuffer)).UnPack();
}
public byte[] SerializeToBinary() {
var fbb = new FlatBufferBuilder(0x10000);
fbb.Finish(MonsterExtra.Pack(fbb, this).Value);
return fbb.DataBuffer.ToSizedArray();
}
} }

View File

@ -191,5 +191,13 @@ public class MovieT
public string SerializeToJson() { public string SerializeToJson() {
return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented); return Newtonsoft.Json.JsonConvert.SerializeObject(this, Newtonsoft.Json.Formatting.Indented);
} }
public static MovieT DeserializeFromBinary(byte[] fbBuffer) {
return Movie.GetRootAsMovie(new ByteBuffer(fbBuffer)).UnPack();
}
public byte[] SerializeToBinary() {
var fbb = new FlatBufferBuilder(0x10000);
fbb.Finish(Movie.Pack(fbb, this).Value);
return fbb.DataBuffer.ToSizedArray();
}
} }