diff --git a/src/idl_gen_csharp.cpp b/src/idl_gen_csharp.cpp index 90ebce101..1e6a91dfc 100644 --- a/src/idl_gen_csharp.cpp +++ b/src/idl_gen_csharp.cpp @@ -1990,6 +1990,19 @@ class CSharpGenerator : public BaseGenerator { "Newtonsoft.Json.Formatting.Indented);\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"; } diff --git a/tests/FlatBuffers.Test/FlatBuffersExampleTests.cs b/tests/FlatBuffers.Test/FlatBuffersExampleTests.cs index 7bdc5022a..8e42ca6b5 100644 --- a/tests/FlatBuffers.Test/FlatBuffersExampleTests.cs +++ b/tests/FlatBuffers.Test/FlatBuffersExampleTests.cs @@ -673,6 +673,10 @@ namespace FlatBuffers.Test var jsonText = b.SerializeToJson(); var d = MonsterT.DeserializeFromJson(jsonText); AreEqual(a, d); + + var fbBuffer = b.SerializeToBinary(); + var e = MonsterT.DeserializeFromBinary(fbBuffer); + AreEqual(a, e); } private void AreEqual(ArrayTable a, ArrayTableT b) @@ -772,6 +776,10 @@ namespace FlatBuffers.Test var jsonText = b.SerializeToJson(); var d = ArrayTableT.DeserializeFromJson(jsonText); AreEqual(a, d); + + var fbBuffer = b.SerializeToBinary(); + var e = ArrayTableT.DeserializeFromBinary(fbBuffer); + AreEqual(a, e); } private void AreEqual(Movie a, MovieT b) @@ -815,6 +823,10 @@ namespace FlatBuffers.Test var jsonText = b.SerializeToJson(); var d = MovieT.DeserializeFromJson(jsonText); AreEqual(a, d); + + var fbBuffer = b.SerializeToBinary(); + var e = MovieT.DeserializeFromBinary(fbBuffer); + AreEqual(a, e); } } } diff --git a/tests/MyGame/Example/ArrayTable.cs b/tests/MyGame/Example/ArrayTable.cs index faa83c68f..656853af8 100644 --- a/tests/MyGame/Example/ArrayTable.cs +++ b/tests/MyGame/Example/ArrayTable.cs @@ -61,6 +61,14 @@ public class ArrayTableT public string SerializeToJson() { 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(); + } } diff --git a/tests/MyGame/Example/Monster.cs b/tests/MyGame/Example/Monster.cs index 43111120b..2faa6d7c6 100644 --- a/tests/MyGame/Example/Monster.cs +++ b/tests/MyGame/Example/Monster.cs @@ -785,6 +785,14 @@ public class MonsterT public string SerializeToJson() { 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(); + } } diff --git a/tests/MyGame/MonsterExtra.cs b/tests/MyGame/MonsterExtra.cs index 7005736a6..da9e7dd22 100644 --- a/tests/MyGame/MonsterExtra.cs +++ b/tests/MyGame/MonsterExtra.cs @@ -191,6 +191,14 @@ public class MonsterExtraT public string SerializeToJson() { 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(); + } } diff --git a/tests/union_vector/Movie.cs b/tests/union_vector/Movie.cs index a19bb25f4..b7fdae54b 100644 --- a/tests/union_vector/Movie.cs +++ b/tests/union_vector/Movie.cs @@ -191,5 +191,13 @@ public class MovieT public string SerializeToJson() { 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(); + } }