[C#] support Json Serialization (#5752)

* support json serialization

* fix invalid json format.
* string must be written with double quotes.
* remove commma after the last object member.

* fix indent

* Revert "fix invalid json format."

This reverts commit d6820ed50c.

* quated string value.

* add cs-gen-json-serializer flag.

* fix preprocessor indent

* ENABLE_JSON_SERIALIZATION -> ENABLE_JSON_SERIALIZATION_TEST

* share TestBuffer method

* remove ENABLE_JSON_SERIALIZATION

* remove duplicated test data

* [windows] add nuget restore and copy test data.

* [docker mono] share msbuild settings with windows. add nuget restore and copy test data.

* add some note for json api.
This commit is contained in:
mugisoba
2020-02-11 10:43:36 +09:00
committed by GitHub
parent 8f56990f6c
commit 173e10fdf1
43 changed files with 680 additions and 42 deletions

View File

@@ -111,18 +111,18 @@ namespace FlatBuffers.Test
}
// Dump to output directory so we can inspect later, if needed
#if ENABLE_SPAN_T
#if ENABLE_SPAN_T
var data = fbb.DataBuffer.ToSizedArray();
string filename = @"Resources/monsterdata_cstest" + (sizePrefix ? "_sp" : "") + ".mon";
File.WriteAllBytes(filename, data);
#else
#else
using (var ms = fbb.DataBuffer.ToMemoryStream(fbb.DataBuffer.Position, fbb.Offset))
{
var data = ms.ToArray();
string filename = @"Resources/monsterdata_cstest" + (sizePrefix ? "_sp" : "") + ".mon";
File.WriteAllBytes(filename, data);
}
#endif
#endif
// Remove the size prefix if necessary for further testing
ByteBuffer dataBuffer = fbb.DataBuffer;
@@ -245,7 +245,7 @@ namespace FlatBuffers.Test
Assert.AreEqual(true, monster.Testbool);
#if ENABLE_SPAN_T
#if ENABLE_SPAN_T
var nameBytes = monster.GetNameBytes();
Assert.AreEqual("MyMonster", Encoding.UTF8.GetString(nameBytes.ToArray(), 0, nameBytes.Length));
@@ -263,7 +263,7 @@ namespace FlatBuffers.Test
var doubleArrayBytes = monster.GetVectorOfDoublesBytes();
Assert.IsTrue(monster.VectorOfDoublesLength * 8 == doubleArrayBytes.Length);
#else
#else
var nameBytes = monster.GetNameBytes().Value;
Assert.AreEqual("MyMonster", Encoding.UTF8.GetString(nameBytes.Array, nameBytes.Offset, nameBytes.Count));
@@ -275,7 +275,7 @@ namespace FlatBuffers.Test
{
Assert.IsTrue(monster.GetTestarrayofboolsBytes().HasValue);
}
#endif
#endif
}
[FlatBuffersTestMethod]
@@ -287,6 +287,16 @@ namespace FlatBuffers.Test
TestObjectAPI(Monster.GetRootAsMonster(bb));
}
[FlatBuffersTestMethod]
public void CanReadJsonFile()
{
var jsonText = File.ReadAllText(@"Resources/monsterdata_test.json");
var mon = MonsterT.DeserializeFromJson(jsonText);
var fbb = new FlatBufferBuilder(1);
fbb.Finish(Monster.Pack(fbb, mon).Value);
TestBuffer(fbb.DataBuffer);
}
[FlatBuffersTestMethod]
public void TestEnums()
{
@@ -659,6 +669,10 @@ namespace FlatBuffers.Test
fbb.Finish(Monster.Pack(fbb, b).Value);
var c = Monster.GetRootAsMonster(fbb.DataBuffer);
AreEqual(a, c);
var jsonText = b.SerializeToJson();
var d = MonsterT.DeserializeFromJson(jsonText);
AreEqual(a, d);
}
private void AreEqual(ArrayTable a, ArrayTableT b)
@@ -754,6 +768,10 @@ namespace FlatBuffers.Test
fbb.Finish(ArrayTable.Pack(fbb, b).Value);
var c = ArrayTable.GetRootAsArrayTable(fbb.DataBuffer);
AreEqual(a, c);
var jsonText = b.SerializeToJson();
var d = ArrayTableT.DeserializeFromJson(jsonText);
AreEqual(a, d);
}
private void AreEqual(Movie a, MovieT b)
@@ -793,6 +811,10 @@ namespace FlatBuffers.Test
fbb.Finish(Movie.Pack(fbb, b).Value);
var c = Movie.GetRootAsMovie(fbb.DataBuffer);
AreEqual(a, c);
var jsonText = b.SerializeToJson();
var d = MovieT.DeserializeFromJson(jsonText);
AreEqual(a, d);
}
}
}