diff --git a/eng/Version.Details.xml b/eng/Version.Details.xml
index 5e06dbf685..10edfb8486 100644
--- a/eng/Version.Details.xml
+++ b/eng/Version.Details.xml
@@ -57,340 +57,340 @@
https://github.com/aspnet/EntityFrameworkCore
b9c9b57de1ba41f75427db0a51b2e897d0354656
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
https://github.com/dotnet/corefx
a28176b5ec68b6da1472934fe9493790d1665cae
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/dotnet/core-setup
- 63abc77da6d99470caa5bfa0465afe244105e595
+ 372355272004e08c035c61077f5d6ca4d8f9cd22
-
+
https://github.com/dotnet/core-setup
- 63abc77da6d99470caa5bfa0465afe244105e595
+ 372355272004e08c035c61077f5d6ca4d8f9cd22
-
+
https://github.com/dotnet/core-setup
- 63abc77da6d99470caa5bfa0465afe244105e595
+ 372355272004e08c035c61077f5d6ca4d8f9cd22
-
+
https://github.com/dotnet/corefx
- e23119d577e644d2c2a25419c88c1181681358e0
+ d47cae744ddfb625db8e391cecb261e4c3d7bb1c
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
https://github.com/dotnet/arcade
@@ -404,9 +404,9 @@
https://github.com/dotnet/arcade
e6a5d5f970bb872451c6310ae34eda31041fb552
-
+
https://github.com/aspnet/Extensions
- 6e92fcad99b6a6e882ac8dc5ad817b558f603597
+ 04a5ac947976fc17e701ffd4cd406b589e14b1e5
diff --git a/eng/Versions.props b/eng/Versions.props
index 1755801069..3ff25c6135 100644
--- a/eng/Versions.props
+++ b/eng/Versions.props
@@ -23,95 +23,95 @@
1.0.0-beta.19302.2
- 3.0.0-preview6-27730-01
- 3.0.0-preview6-27730-01
- 2.1.0-preview6-27730-01
+ 3.0.0-preview6-27803-13
+ 3.0.0-preview6-27803-13
+ 2.1.0-preview6-27803-13
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
4.7.0-preview6.19264.9
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
- 1.7.0-preview6.19279.8
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
- 4.6.0-preview6.19279.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
+ 1.7.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
+ 4.6.0-preview6.19303.8
- 3.0.0-preview6.19279.8
+ 3.0.0-preview6.19303.8
0.10.0-preview7.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
- 3.0.0-preview6.19303.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
+ 3.0.0-preview6.19304.2
3.0.0-preview7.19303.12
3.0.0-preview7.19303.12
@@ -180,9 +180,9 @@
0.10.13
4.2.1
4.2.1
- 3.7.0
- 0.1.21-dev201905010701
- 1.20.0-pre3
+ 3.8.0
+ 0.1.21-pre1
+ 1.21.0
3.0.0-preview3.4
3.0.0-preview3.4
3.0.0-preview3.4
diff --git a/src/Mvc/Mvc.ViewFeatures/test/Rendering/JsonHelperTestBase.cs b/src/Mvc/Mvc.ViewFeatures/test/Rendering/JsonHelperTestBase.cs
index 90d994af41..cfbabe735b 100644
--- a/src/Mvc/Mvc.ViewFeatures/test/Rendering/JsonHelperTestBase.cs
+++ b/src/Mvc/Mvc.ViewFeatures/test/Rendering/JsonHelperTestBase.cs
@@ -10,7 +10,7 @@ namespace Microsoft.AspNetCore.Mvc.Rendering
protected abstract IJsonHelper GetJsonHelper();
[Fact]
- public void Serialize_EscapesHtmlByDefault()
+ public virtual void Serialize_EscapesHtmlByDefault()
{
// Arrange
var helper = GetJsonHelper();
diff --git a/src/Mvc/Mvc.ViewFeatures/test/Rendering/SystemTextJsonHelperTest.cs b/src/Mvc/Mvc.ViewFeatures/test/Rendering/SystemTextJsonHelperTest.cs
index 4550976a40..e754844dec 100644
--- a/src/Mvc/Mvc.ViewFeatures/test/Rendering/SystemTextJsonHelperTest.cs
+++ b/src/Mvc/Mvc.ViewFeatures/test/Rendering/SystemTextJsonHelperTest.cs
@@ -2,7 +2,9 @@
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System.Text.Json.Serialization;
+using Microsoft.AspNetCore.Html;
using Microsoft.Extensions.Options;
+using Xunit;
namespace Microsoft.AspNetCore.Mvc.Rendering
{
@@ -13,5 +15,24 @@ namespace Microsoft.AspNetCore.Mvc.Rendering
var options = new JsonOptions() { JsonSerializerOptions = { PropertyNamingPolicy = JsonNamingPolicy.CamelCase } };
return new SystemTextJsonHelper(Options.Create(options));
}
+
+ [Fact]
+ public override void Serialize_EscapesHtmlByDefault()
+ {
+ // Arrange
+ var helper = GetJsonHelper();
+ var obj = new
+ {
+ HTML = "John Doe"
+ };
+ var expectedOutput = "{\"html\":\"\\u003cb\\u003eJohn Doe\\u003c\\u002fb\\u003e\"}";
+
+ // Act
+ var result = helper.Serialize(obj);
+
+ // Assert
+ var htmlString = Assert.IsType(result);
+ Assert.Equal(expectedOutput, htmlString.ToString());
+ }
}
}
diff --git a/src/SignalR/clients/ts/FunctionalTests/ts/HubConnectionTests.ts b/src/SignalR/clients/ts/FunctionalTests/ts/HubConnectionTests.ts
index a5e4059fc6..bb577c539a 100644
--- a/src/SignalR/clients/ts/FunctionalTests/ts/HubConnectionTests.ts
+++ b/src/SignalR/clients/ts/FunctionalTests/ts/HubConnectionTests.ts
@@ -457,7 +457,7 @@ describe("hubConnection", () => {
const complexObject = {
ByteArray: protocol.name === "json"
- ? new Array(0x68, 0x65, 0x6c, 0x6c, 0x6f)
+ ? "aGVsbG8="
: new Uint8Array([0x68, 0x65, 0x6c, 0x6c, 0x6f]),
DateTime: protocol.name === "json"
? "2002-04-01T10:20:15Z"
@@ -499,7 +499,7 @@ describe("hubConnection", () => {
const complexObject = {
ByteArray: protocol.name === "json"
- ? new Array(0x1, 0x2, 0x3)
+ ? "AQID"
: new Uint8Array([0x1, 0x2, 0x3]),
DateTime: protocol.name === "json"
? "2000-01-01T00:00:00Z"
diff --git a/src/SignalR/common/Shared/SystemTextJsonExtensions.cs b/src/SignalR/common/Shared/SystemTextJsonExtensions.cs
index 2af8371d7d..766efadb18 100644
--- a/src/SignalR/common/Shared/SystemTextJsonExtensions.cs
+++ b/src/SignalR/common/Shared/SystemTextJsonExtensions.cs
@@ -57,23 +57,6 @@ namespace Microsoft.AspNetCore.Internal
}
}
- // Remove after https://github.com/dotnet/corefx/issues/33295 is done
- public static void Skip(this ref Utf8JsonReader reader)
- {
- if (reader.TokenType == JsonTokenType.PropertyName)
- {
- reader.Read();
- }
-
- if (reader.TokenType == JsonTokenType.StartObject || reader.TokenType == JsonTokenType.StartArray)
- {
- int depth = reader.CurrentDepth;
- while (reader.Read() && depth < reader.CurrentDepth)
- {
- }
- }
- }
-
public static string ReadAsString(this ref Utf8JsonReader reader, string propertyName)
{
reader.Read();
diff --git a/src/SignalR/common/SignalR.Common/test/Internal/Protocol/JsonHubProtocolTests.cs b/src/SignalR/common/SignalR.Common/test/Internal/Protocol/JsonHubProtocolTests.cs
index 5ef05d6e4e..f7dcdfa3c1 100644
--- a/src/SignalR/common/SignalR.Common/test/Internal/Protocol/JsonHubProtocolTests.cs
+++ b/src/SignalR/common/SignalR.Common/test/Internal/Protocol/JsonHubProtocolTests.cs
@@ -105,32 +105,32 @@ namespace Microsoft.AspNetCore.SignalR.Common.Tests.Internal.Protocol
{
new JsonProtocolTestData("InvocationMessage_HasFloatArgument", new InvocationMessage(null, "Target", new object[] { 1, "Foo", 2.0f }), true, true, "{\"type\":1,\"target\":\"Target\",\"arguments\":[1,\"Foo\",2]}"),
new JsonProtocolTestData("InvocationMessage_StringIsoDateArgument", new InvocationMessage("Method", new object[] { "2016-05-10T13:51:20+12:34" }), true, true, "{\"type\":1,\"target\":\"Method\",\"arguments\":[\"2016-05-10T13:51:20\\u002b12:34\"]}"),
- new JsonProtocolTestData("InvocationMessage_HasCustomArgumentWithNoCamelCase", new InvocationMessage(null, "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), false, true, "{\"type\":1,\"target\":\"Target\",\"arguments\":[{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"ByteArrProp\":[1,2,3]}]}"),
- new JsonProtocolTestData("InvocationMessage_HasCustomArgumentWithNullValueIgnore", new InvocationMessage(null, "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), true, true, "{\"type\":1,\"target\":\"Target\",\"arguments\":[{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"byteArrProp\":[1,2,3]}]}"),
- new JsonProtocolTestData("InvocationMessage_HasCustomArgumentWithNullValueIgnoreAndNoCamelCase", new InvocationMessage(null, "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), false, false, "{\"type\":1,\"target\":\"Target\",\"arguments\":[{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"NullProp\":null,\"ByteArrProp\":[1,2,3]}]}"),
- new JsonProtocolTestData("InvocationMessage_HasCustomArgumentWithNullValueInclude", new InvocationMessage(null, "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), true, false, "{\"type\":1,\"target\":\"Target\",\"arguments\":[{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"nullProp\":null,\"byteArrProp\":[1,2,3]}]}"),
+ new JsonProtocolTestData("InvocationMessage_HasCustomArgumentWithNoCamelCase", new InvocationMessage(null, "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), false, true, "{\"type\":1,\"target\":\"Target\",\"arguments\":[{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"ByteArrProp\":\"AQID\"}]}"),
+ new JsonProtocolTestData("InvocationMessage_HasCustomArgumentWithNullValueIgnore", new InvocationMessage(null, "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), true, true, "{\"type\":1,\"target\":\"Target\",\"arguments\":[{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"byteArrProp\":\"AQID\"}]}"),
+ new JsonProtocolTestData("InvocationMessage_HasCustomArgumentWithNullValueIgnoreAndNoCamelCase", new InvocationMessage(null, "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), false, false, "{\"type\":1,\"target\":\"Target\",\"arguments\":[{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"NullProp\":null,\"ByteArrProp\":\"AQID\"}]}"),
+ new JsonProtocolTestData("InvocationMessage_HasCustomArgumentWithNullValueInclude", new InvocationMessage(null, "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), true, false, "{\"type\":1,\"target\":\"Target\",\"arguments\":[{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"nullProp\":null,\"byteArrProp\":\"AQID\"}]}"),
new JsonProtocolTestData("InvocationMessage_HasHeaders", AddHeaders(TestHeaders, new InvocationMessage("123", "Target", new object[] { 1, "Foo", 2.0f })), true, true, "{\"type\":1," + SerializedHeaders + ",\"invocationId\":\"123\",\"target\":\"Target\",\"arguments\":[1,\"Foo\",2]}"),
- new JsonProtocolTestData("StreamItemMessage_HasCustomItemWithNoCamelCase", new StreamItemMessage("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), false, true, "{\"type\":2,\"invocationId\":\"123\",\"item\":{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"ByteArrProp\":[1,2,3]}}"),
- new JsonProtocolTestData("StreamItemMessage_HasCustomItemWithNullValueIgnore", new StreamItemMessage("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), true, true, "{\"type\":2,\"invocationId\":\"123\",\"item\":{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"byteArrProp\":[1,2,3]}}"),
- new JsonProtocolTestData("StreamItemMessage_HasCustomItemWithNullValueIgnoreAndNoCamelCase", new StreamItemMessage("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), false, false, "{\"type\":2,\"invocationId\":\"123\",\"item\":{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"NullProp\":null,\"ByteArrProp\":[1,2,3]}}"),
- new JsonProtocolTestData("StreamItemMessage_HasCustomItemWithNullValueInclude", new StreamItemMessage("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), true, false, "{\"type\":2,\"invocationId\":\"123\",\"item\":{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"nullProp\":null,\"byteArrProp\":[1,2,3]}}"),
+ new JsonProtocolTestData("StreamItemMessage_HasCustomItemWithNoCamelCase", new StreamItemMessage("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), false, true, "{\"type\":2,\"invocationId\":\"123\",\"item\":{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"ByteArrProp\":\"AQID\"}}"),
+ new JsonProtocolTestData("StreamItemMessage_HasCustomItemWithNullValueIgnore", new StreamItemMessage("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), true, true, "{\"type\":2,\"invocationId\":\"123\",\"item\":{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"byteArrProp\":\"AQID\"}}"),
+ new JsonProtocolTestData("StreamItemMessage_HasCustomItemWithNullValueIgnoreAndNoCamelCase", new StreamItemMessage("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), false, false, "{\"type\":2,\"invocationId\":\"123\",\"item\":{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"NullProp\":null,\"ByteArrProp\":\"AQID\"}}"),
+ new JsonProtocolTestData("StreamItemMessage_HasCustomItemWithNullValueInclude", new StreamItemMessage("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), true, false, "{\"type\":2,\"invocationId\":\"123\",\"item\":{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"nullProp\":null,\"byteArrProp\":\"AQID\"}}"),
new JsonProtocolTestData("StreamItemMessage_HasFloatItem", new StreamItemMessage("123", 2.0f), true, true, "{\"type\":2,\"invocationId\":\"123\",\"item\":2}"),
- new JsonProtocolTestData("StreamItemMessage_HasHeaders", AddHeaders(TestHeaders, new StreamItemMessage("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } })), true, false, "{\"type\":2," + SerializedHeaders + ",\"invocationId\":\"123\",\"item\":{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"nullProp\":null,\"byteArrProp\":[1,2,3]}}"),
+ new JsonProtocolTestData("StreamItemMessage_HasHeaders", AddHeaders(TestHeaders, new StreamItemMessage("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } })), true, false, "{\"type\":2," + SerializedHeaders + ",\"invocationId\":\"123\",\"item\":{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"nullProp\":null,\"byteArrProp\":\"AQID\"}}"),
new JsonProtocolTestData("CompletionMessage_HasFloatResult", CompletionMessage.WithResult("123", 2.0f), true, true, "{\"type\":3,\"invocationId\":\"123\",\"result\":2}"),
- new JsonProtocolTestData("CompletionMessage_HasCustomResultWithNoCamelCase", CompletionMessage.WithResult("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), false, true, "{\"type\":3,\"invocationId\":\"123\",\"result\":{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"ByteArrProp\":[1,2,3]}}"),
- new JsonProtocolTestData("CompletionMessage_HasCustomResultWithNullValueIgnore", CompletionMessage.WithResult("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), true, true, "{\"type\":3,\"invocationId\":\"123\",\"result\":{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"byteArrProp\":[1,2,3]}}"),
- new JsonProtocolTestData("CompletionMessage_HasCustomResultWithNullValueIncludeAndNoCamelCase", CompletionMessage.WithResult("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), false, false, "{\"type\":3,\"invocationId\":\"123\",\"result\":{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"NullProp\":null,\"ByteArrProp\":[1,2,3]}}"),
- new JsonProtocolTestData("CompletionMessage_HasCustomResultWithNullValueInclude", CompletionMessage.WithResult("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), true, false, "{\"type\":3,\"invocationId\":\"123\",\"result\":{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"nullProp\":null,\"byteArrProp\":[1,2,3]}}"),
+ new JsonProtocolTestData("CompletionMessage_HasCustomResultWithNoCamelCase", CompletionMessage.WithResult("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), false, true, "{\"type\":3,\"invocationId\":\"123\",\"result\":{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"ByteArrProp\":\"AQID\"}}"),
+ new JsonProtocolTestData("CompletionMessage_HasCustomResultWithNullValueIgnore", CompletionMessage.WithResult("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), true, true, "{\"type\":3,\"invocationId\":\"123\",\"result\":{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"byteArrProp\":\"AQID\"}}"),
+ new JsonProtocolTestData("CompletionMessage_HasCustomResultWithNullValueIncludeAndNoCamelCase", CompletionMessage.WithResult("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), false, false, "{\"type\":3,\"invocationId\":\"123\",\"result\":{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"NullProp\":null,\"ByteArrProp\":\"AQID\"}}"),
+ new JsonProtocolTestData("CompletionMessage_HasCustomResultWithNullValueInclude", CompletionMessage.WithResult("123", new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } }), true, false, "{\"type\":3,\"invocationId\":\"123\",\"result\":{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"nullProp\":null,\"byteArrProp\":\"AQID\"}}"),
new JsonProtocolTestData("CompletionMessage_HasErrorAndCamelCase", CompletionMessage.Empty("123"), true, true, "{\"type\":3,\"invocationId\":\"123\"}"),
- new JsonProtocolTestData("StreamInvocationMessage_HasCustomArgumentWithNoCamelCase", new StreamInvocationMessage("123", "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), false, true, "{\"type\":4,\"invocationId\":\"123\",\"target\":\"Target\",\"arguments\":[{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"ByteArrProp\":[1,2,3]}]}"),
- new JsonProtocolTestData("StreamInvocationMessage_HasCustomArgumentWithNullValueIgnore", new StreamInvocationMessage("123", "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), true, true, "{\"type\":4,\"invocationId\":\"123\",\"target\":\"Target\",\"arguments\":[{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"byteArrProp\":[1,2,3]}]}"),
- new JsonProtocolTestData("StreamInvocationMessage_HasCustomArgumentWithNullValueIgnoreAndNoCamelCase", new StreamInvocationMessage("123", "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), false, false, "{\"type\":4,\"invocationId\":\"123\",\"target\":\"Target\",\"arguments\":[{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"NullProp\":null,\"ByteArrProp\":[1,2,3]}]}"),
- new JsonProtocolTestData("StreamInvocationMessage_HasCustomArgumentWithNullValueInclude", new StreamInvocationMessage("123", "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), true, false, "{\"type\":4,\"invocationId\":\"123\",\"target\":\"Target\",\"arguments\":[{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"nullProp\":null,\"byteArrProp\":[1,2,3]}]}"),
+ new JsonProtocolTestData("StreamInvocationMessage_HasCustomArgumentWithNoCamelCase", new StreamInvocationMessage("123", "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), false, true, "{\"type\":4,\"invocationId\":\"123\",\"target\":\"Target\",\"arguments\":[{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"ByteArrProp\":\"AQID\"}]}"),
+ new JsonProtocolTestData("StreamInvocationMessage_HasCustomArgumentWithNullValueIgnore", new StreamInvocationMessage("123", "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), true, true, "{\"type\":4,\"invocationId\":\"123\",\"target\":\"Target\",\"arguments\":[{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"byteArrProp\":\"AQID\"}]}"),
+ new JsonProtocolTestData("StreamInvocationMessage_HasCustomArgumentWithNullValueIgnoreAndNoCamelCase", new StreamInvocationMessage("123", "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), false, false, "{\"type\":4,\"invocationId\":\"123\",\"target\":\"Target\",\"arguments\":[{\"StringProp\":\"SignalR!\",\"DoubleProp\":6.2831853071,\"IntProp\":42,\"DateTimeProp\":\"2017-04-11T00:00:00Z\",\"NullProp\":null,\"ByteArrProp\":\"AQID\"}]}"),
+ new JsonProtocolTestData("StreamInvocationMessage_HasCustomArgumentWithNullValueInclude", new StreamInvocationMessage("123", "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } }), true, false, "{\"type\":4,\"invocationId\":\"123\",\"target\":\"Target\",\"arguments\":[{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"nullProp\":null,\"byteArrProp\":\"AQID\"}]}"),
new JsonProtocolTestData("StreamInvocationMessage_HasFloatArgument", new StreamInvocationMessage("123", "Target", new object[] { 1, "Foo", 2.0f }), true, true, "{\"type\":4,\"invocationId\":\"123\",\"target\":\"Target\",\"arguments\":[1,\"Foo\",2]}"),
- new JsonProtocolTestData("StreamInvocationMessage_HasHeaders", AddHeaders(TestHeaders, new StreamInvocationMessage("123", "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } })), true, false, "{\"type\":4," + SerializedHeaders + ",\"invocationId\":\"123\",\"target\":\"Target\",\"arguments\":[{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"nullProp\":null,\"byteArrProp\":[1,2,3]}]}"),
+ new JsonProtocolTestData("StreamInvocationMessage_HasHeaders", AddHeaders(TestHeaders, new StreamInvocationMessage("123", "Target", new object[] { new TemporaryCustomObject() { ByteArrProp = new byte[] { 1, 2, 3 } } })), true, false, "{\"type\":4," + SerializedHeaders + ",\"invocationId\":\"123\",\"target\":\"Target\",\"arguments\":[{\"stringProp\":\"SignalR!\",\"doubleProp\":6.2831853071,\"intProp\":42,\"dateTimeProp\":\"2017-04-11T00:00:00Z\",\"nullProp\":null,\"byteArrProp\":\"AQID\"}]}"),
}.ToDictionary(t => t.Name);
public static IEnumerable