mirror of
https://github.com/google/flatbuffers.git
synced 2026-06-29 02:40:01 +00:00
[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:
@@ -17,7 +17,7 @@
|
||||
<DebugType>full</DebugType>
|
||||
<Optimize>false</Optimize>
|
||||
<OutputPath>bin\Debug\</OutputPath>
|
||||
<DefineConstants>DEBUG;TRACE</DefineConstants>
|
||||
<DefineConstants>TRACE;DEBUG</DefineConstants>
|
||||
<ErrorReport>prompt</ErrorReport>
|
||||
<WarningLevel>4</WarningLevel>
|
||||
</PropertyGroup>
|
||||
@@ -37,6 +37,9 @@
|
||||
<DefineConstants>$(DefineConstants);UNSAFE_BYTEBUFFER</DefineConstants>
|
||||
</PropertyGroup>
|
||||
<ItemGroup>
|
||||
<Reference Include="Newtonsoft.Json, Version=12.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed, processorArchitecture=MSIL">
|
||||
<HintPath>packages\Newtonsoft.Json.12.0.3\lib\net35\Newtonsoft.Json.dll</HintPath>
|
||||
</Reference>
|
||||
<Reference Include="System" />
|
||||
<Reference Include="System.Core">
|
||||
<RequiredTargetFramework>3.5</RequiredTargetFramework>
|
||||
@@ -169,6 +172,13 @@
|
||||
<Link>Resources\monsterdata_test.mon</Link>
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
<Content Include="..\monsterdata_test.json">
|
||||
<Link>Resources\monsterdata_test.json</Link>
|
||||
<CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
|
||||
</Content>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<None Include="packages.config" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
<!-- To modify your build process, add your task inside one of the targets below and uncomment it.
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,23 +1,41 @@
|
||||
#!/bin/sh
|
||||
|
||||
# Restore nuget packages
|
||||
mkdir dotnet_tmp
|
||||
curl -OL https://dot.net/v1/dotnet-install.sh
|
||||
chmod +x dotnet-install.sh
|
||||
./dotnet-install.sh --version 3.1.101 --install-dir dotnet_tmp
|
||||
dotnet_tmp/dotnet new sln
|
||||
dotnet_tmp/dotnet sln add FlatBuffers.Test.csproj
|
||||
curl -OL https://dist.nuget.org/win-x86-commandline/v5.4.0/nuget.exe
|
||||
mono nuget.exe restore
|
||||
|
||||
# Copy Test Files
|
||||
cp ../monsterdata_test.mon Resources/
|
||||
cp ../monsterdata_test.json Resources/
|
||||
|
||||
# Testing C# on Linux using Mono.
|
||||
|
||||
mcs -debug -out:./fbnettest.exe \
|
||||
../../net/FlatBuffers/*.cs ../MyGame/Example/*.cs ../MyGame/Example2/*.cs ../MyGame/*.cs ../union_vector/*.cs \
|
||||
FlatBuffersTestClassAttribute.cs FlatBuffersTestMethodAttribute.cs Assert.cs FlatBuffersExampleTests.cs Program.cs ByteBufferTests.cs FlatBufferBuilderTests.cs FlatBuffersFuzzTests.cs FuzzTestData.cs Lcg.cs TestTable.cs
|
||||
mono --debug ./fbnettest.exe
|
||||
rm fbnettest.exe
|
||||
msbuild -property:Configuration=Release,OutputPath=tempcs -verbosity:minimal FlatBuffers.Test.csproj
|
||||
mono tempcs/FlatBuffers.Test.exe
|
||||
rm -fr tempcs
|
||||
rm Resources/monsterdata_cstest.mon
|
||||
rm Resources/monsterdata_cstest_sp.mon
|
||||
|
||||
# Repeat with unsafe versions
|
||||
|
||||
mcs -debug -out:./fbnettest.exe \
|
||||
-unsafe -d:UNSAFE_BYTEBUFFER \
|
||||
../../net/FlatBuffers/*.cs ../MyGame/Example/*.cs ../MyGame/Example2/*.cs ../MyGame/*.cs ../union_vector/*.cs\
|
||||
FlatBuffersTestClassAttribute.cs FlatBuffersTestMethodAttribute.cs Assert.cs FlatBuffersExampleTests.cs Program.cs ByteBufferTests.cs FlatBufferBuilderTests.cs FlatBuffersFuzzTests.cs FuzzTestData.cs Lcg.cs TestTable.cs
|
||||
mono --debug ./fbnettest.exe
|
||||
rm fbnettest.exe
|
||||
msbuild -property:Configuration=Release,UnsafeByteBuffer=true,OutputPath=tempcsUnsafe -verbosity:minimal FlatBuffers.Test.csproj
|
||||
mono tempcsUnsafe/FlatBuffers.Test.exe
|
||||
rm -fr tempcsUnsafe
|
||||
rm Resources/monsterdata_cstest.mon
|
||||
rm Resources/monsterdata_cstest_sp.mon
|
||||
|
||||
# Remove Temp Files
|
||||
rm -fr dotnet_tmp
|
||||
rm -fr packages
|
||||
rm dotnet-install.sh
|
||||
rm nuget.exe
|
||||
rm FlatBuffers.Test.sln
|
||||
rm Resources/monsterdata_test.mon
|
||||
rm Resources/monsterdata_test.json
|
||||
|
||||
|
||||
0
tests/FlatBuffers.Test/Resources/.gitkeep
Normal file
0
tests/FlatBuffers.Test/Resources/.gitkeep
Normal file
Binary file not shown.
4
tests/FlatBuffers.Test/packages.config
Normal file
4
tests/FlatBuffers.Test/packages.config
Normal file
@@ -0,0 +1,4 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<packages>
|
||||
<package id="Newtonsoft.Json" version="12.0.3" targetFramework="net35" />
|
||||
</packages>
|
||||
Reference in New Issue
Block a user