Fix null values handling in C# Json serialization

It didn't replace prefab object reference if replaced with null in the prefab instance.
This commit is contained in:
2021-08-19 13:03:54 +02:00
parent 4c1dbb7f8e
commit a8c7705c3b
3 changed files with 11 additions and 6 deletions
@@ -73,7 +73,7 @@ namespace FlaxEngine.Json
ContractResolver = new ExtendedDefaultContractResolver(isManagedOnly),
ReferenceLoopHandling = ReferenceLoopHandling.Ignore,
TypeNameHandling = TypeNameHandling.Auto,
NullValueHandling = NullValueHandling.Ignore,
NullValueHandling = NullValueHandling.Include,
ObjectCreationHandling = ObjectCreationHandling.Auto,
};
if (ObjectConverter == null)
@@ -276,6 +276,11 @@ namespace FlaxEngine.Json
cache.IsDuringSerialization = false;
Current.Value = cache;
/*// Debug json string reading
cache.MemoryStream.Initialize(jsonBuffer, jsonLength);
cache.Reader.DiscardBufferedData();
string json = cache.Reader.ReadToEnd();*/
cache.MemoryStream.Initialize(jsonBuffer, jsonLength);
cache.Reader.DiscardBufferedData();
var jsonReader = new JsonTextReader(cache.Reader);
+2 -2
View File
@@ -877,7 +877,7 @@ namespace FlaxEngine.GUI
/// <summary>
/// Gets or sets the tooltip text.
/// </summary>
[HideInEditor]
[HideInEditor, NoSerialize]
public string TooltipText
{
get => _tooltipText;
@@ -887,7 +887,7 @@ namespace FlaxEngine.GUI
/// <summary>
/// Gets or sets the custom tooltip control linked. Use null to show default shared tooltip from the current <see cref="Style"/>.
/// </summary>
[HideInEditor]
[HideInEditor, NoSerialize]
public Tooltip CustomTooltip
{
get => _tooltip;
@@ -47,15 +47,15 @@ namespace FlaxEngine.Tests
{
ObjectOne obj = new ObjectOne();
Assert.AreEqual("{\n\t\"MyValue\": 0.0,\n\t\"MyVector\": {\n\t\t\"X\": 0.0,\n\t\t\"Y\": 0.0\n\t}\n}", FilterLineBreak(JsonSerializer.Serialize(obj)));
Assert.AreEqual("{\n\t\"MyValue\": 0.0,\n\t\"MyVector\": {\n\t\t\"X\": 0.0,\n\t\t\"Y\": 0.0\n\t},\n\t\"MyArray\": null\n}", FilterLineBreak(JsonSerializer.Serialize(obj)));
obj.MyValue = 1.2f;
Assert.AreEqual("{\n\t\"MyValue\": 1.2,\n\t\"MyVector\": {\n\t\t\"X\": 0.0,\n\t\t\"Y\": 0.0\n\t}\n}", FilterLineBreak(JsonSerializer.Serialize(obj)));
Assert.AreEqual("{\n\t\"MyValue\": 1.2,\n\t\"MyVector\": {\n\t\t\"X\": 0.0,\n\t\t\"Y\": 0.0\n\t},\n\t\"MyArray\": null\n}", FilterLineBreak(JsonSerializer.Serialize(obj)));
obj.MyVector.Y = 2.0f;
Assert.AreEqual("{\n\t\"MyValue\": 1.2,\n\t\"MyVector\": {\n\t\t\"X\": 0.0,\n\t\t\"Y\": 2.0\n\t}\n}", FilterLineBreak(JsonSerializer.Serialize(obj)));
Assert.AreEqual("{\n\t\"MyValue\": 1.2,\n\t\"MyVector\": {\n\t\t\"X\": 0.0,\n\t\t\"Y\": 2.0\n\t},\n\t\"MyArray\": null\n}", FilterLineBreak(JsonSerializer.Serialize(obj)));
obj.MyArray = new[]
{