com.wallstop-studios.unity-helpers 2.0.0-rc27 → 2.0.0-rc31
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.gitattributes +63 -63
- package/.github/workflows/npm-publish.yml +60 -0
- package/.github/workflows/unity-package.yml +101 -0
- package/.github/workflows/unity-tests.yml +38 -0
- package/Editor/AnimationCopier.cs +158 -158
- package/Editor/AnimationCopier.cs.meta +2 -2
- package/Editor/AnimationCreator.cs +262 -262
- package/Editor/AnimationCreator.cs.meta +11 -11
- package/Editor/AnimationEventEditor.cs +887 -887
- package/Editor/AnimatorControllerCopier.cs +162 -162
- package/Editor/AnimatorControllerCopier.cs.meta +2 -2
- package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs +34 -34
- package/Editor/CustomEditors/MatchColliderToSpriteEditor.cs.meta +2 -2
- package/Editor/CustomEditors.meta +2 -2
- package/Editor/EnsureTextureSizeWizard.cs +110 -110
- package/Editor/EnsureTextureSizeWizard.cs.meta +2 -2
- package/Editor/PrefabCheckWizard.cs +165 -165
- package/Editor/PrefabCheckWizard.cs.meta +11 -11
- package/Editor/SpriteSettingsApplier.cs +168 -168
- package/Editor/SpriteSettingsApplier.cs.meta +2 -2
- package/Editor/StringInListeDrawer.cs +56 -56
- package/Editor/TextureResizerWizard.cs +181 -181
- package/Editor/TextureResizerWizard.cs.meta +2 -2
- package/Editor/TextureSettingsApplier.cs +171 -171
- package/Editor/TextureSettingsApplier.cs.meta +2 -2
- package/Editor/Utils/EditorUtilities.cs +22 -22
- package/Editor/Utils/EditorUtilities.cs.meta +11 -11
- package/Editor/Utils/ReadOnlyPropertyDrawer.cs +26 -26
- package/Editor/Utils/ReadOnlyPropertyDrawer.cs.meta +11 -11
- package/Editor/Utils.meta +8 -8
- package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef +17 -17
- package/Editor/WallstopStudios.UnityHelpers.Editor.asmdef.meta +7 -7
- package/LICENSE +21 -21
- package/LICENSE.md +6 -6
- package/LICENSE.meta +7 -7
- package/README.md +117 -117
- package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.dll.meta +33 -33
- package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml +223 -223
- package/Runtime/Binaries/Microsoft.Bcl.AsyncInterfaces.xml.meta +7 -7
- package/Runtime/Binaries/System.Text.Encodings.Web.dll.meta +33 -33
- package/Runtime/Binaries/System.Text.Encodings.Web.xml +935 -935
- package/Runtime/Binaries/System.Text.Encodings.Web.xml.meta +7 -7
- package/Runtime/Binaries/System.Text.Json.dll.meta +33 -33
- package/Runtime/Binaries/System.Text.Json.xml +4829 -4829
- package/Runtime/Binaries/System.Text.Json.xml.meta +7 -7
- package/Runtime/Binaries.meta +8 -8
- package/Runtime/Core/Attributes/AnimationEventAttribute.cs +131 -131
- package/Runtime/Core/Attributes/ChildComponentAttribute.cs +189 -189
- package/Runtime/Core/Attributes/KSerializableAttribute.cs +19 -19
- package/Runtime/Core/Attributes/NotNullAttribute.cs +32 -32
- package/Runtime/Core/Attributes/ParentComponent.cs +184 -184
- package/Runtime/Core/Attributes/ReadOnlyAttribute.cs +6 -6
- package/Runtime/Core/Attributes/RelationalComponentExtensions.cs +14 -14
- package/Runtime/Core/Attributes/SiblingComponentAttribute.cs +119 -119
- package/Runtime/Core/Attributes/SiblingComponentAttribute.cs.meta +11 -11
- package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs +101 -101
- package/Runtime/Core/Attributes/ValidateAssignmentAttribute.cs.meta +11 -11
- package/Runtime/Core/Attributes.meta +8 -8
- package/Runtime/Core/DataStructure/Adapters/FastVector2Int.cs +92 -92
- package/Runtime/Core/DataStructure/Adapters/FastVector3Int.cs +185 -185
- package/Runtime/Core/DataStructure/Adapters/KGuid.cs +305 -305
- package/Runtime/Core/DataStructure/Adapters/KVector2.cs +80 -80
- package/Runtime/Core/DataStructure/Circle.cs +50 -50
- package/Runtime/Core/DataStructure/CyclicBuffer.cs +155 -155
- package/Runtime/Core/DataStructure/ISpatialTree.cs +60 -60
- package/Runtime/Core/DataStructure/ISpatialTree.cs.meta +11 -11
- package/Runtime/Core/DataStructure/KDTree.cs +290 -290
- package/Runtime/Core/DataStructure/KDTree.cs.meta +11 -11
- package/Runtime/Core/DataStructure/QuadTree.cs +279 -279
- package/Runtime/Core/DataStructure/RTree.cs +336 -336
- package/Runtime/Core/DataStructure/RTree.cs.meta +11 -11
- package/Runtime/Core/DataStructure/StringWrapper.cs +91 -91
- package/Runtime/Core/DataStructure/TimedCache.cs +51 -51
- package/Runtime/Core/Extension/AnimatorExtensions.cs +25 -25
- package/Runtime/Core/Extension/CircleExtensions.cs +25 -25
- package/Runtime/Core/Extension/ColorExtensions.cs +338 -338
- package/Runtime/Core/Extension/DictionaryExtensions.cs +251 -251
- package/Runtime/Core/Extension/DirectionExtensions.cs +213 -213
- package/Runtime/Core/Extension/HashSetExtensions.cs +12 -12
- package/Runtime/Core/Extension/IEnumerableExtensions.cs +122 -122
- package/Runtime/Core/Extension/IListExtensions.cs +89 -89
- package/Runtime/Core/Extension/LoggingExtensions.cs +258 -258
- package/Runtime/Core/Extension/RandomExtensions.cs +109 -109
- package/Runtime/Core/Extension/StringExtensions.cs +151 -151
- package/Runtime/Core/Extension/UnityExtensions.cs +1607 -1607
- package/Runtime/Core/Helper/ArrayConverter.cs +39 -39
- package/Runtime/Core/Helper/ArrayConverter.cs.meta +2 -2
- package/Runtime/Core/Helper/AssignUtilities.cs +14 -14
- package/Runtime/Core/Helper/AssignUtilities.cs.meta +11 -11
- package/Runtime/Core/Helper/Enumerables.cs +17 -17
- package/Runtime/Core/Helper/Geometry.cs +43 -43
- package/Runtime/Core/Helper/Helpers.cs +722 -722
- package/Runtime/Core/Helper/Helpers.cs.meta +11 -11
- package/Runtime/Core/Helper/IterationHelpers.cs +32 -32
- package/Runtime/Core/Helper/IterationHelpers.cs.meta +11 -11
- package/Runtime/Core/Helper/LifetimeHelpers.cs +13 -13
- package/Runtime/Core/Helper/Objects.cs +767 -767
- package/Runtime/Core/Helper/Partials/LogHelpers.cs +13 -13
- package/Runtime/Core/Helper/Partials/LogHelpers.cs.meta +2 -2
- package/Runtime/Core/Helper/Partials/MathHelpers.cs +30 -30
- package/Runtime/Core/Helper/Partials/MathHelpers.cs.meta +2 -2
- package/Runtime/Core/Helper/Partials/ObjectHelpers.cs +388 -388
- package/Runtime/Core/Helper/Partials/ObjectHelpers.cs.meta +2 -2
- package/Runtime/Core/Helper/Partials/TransformHelpers.cs +167 -167
- package/Runtime/Core/Helper/Partials/TransformHelpers.cs.meta +2 -2
- package/Runtime/Core/Helper/Partials.meta +2 -2
- package/Runtime/Core/Helper/ReflectionHelpers.cs +152 -152
- package/Runtime/Core/Helper/ReflectionHelpers.cs.meta +2 -2
- package/Runtime/Core/Helper/SpriteHelpers.cs +86 -86
- package/Runtime/Core/Helper/SpriteHelpers.cs.meta +11 -11
- package/Runtime/Core/Helper/StringInList.cs +31 -31
- package/Runtime/Core/Helper/StringInList.cs.meta +11 -11
- package/Runtime/Core/Helper/WallMath.cs +166 -166
- package/Runtime/Core/Math/Line.cs +55 -55
- package/Runtime/Core/Math/Parabola.cs +47 -47
- package/Runtime/Core/Math/PointPolygonCheck.cs +36 -36
- package/Runtime/Core/Math/PointPolygonCheck.cs.meta +11 -11
- package/Runtime/Core/Math/Range.cs +92 -92
- package/Runtime/Core/Math/XXHash.cs +310 -310
- package/Runtime/Core/Math/XXHash.cs.meta +11 -11
- package/Runtime/Core/Model/Direction.cs +43 -43
- package/Runtime/Core/OneOf/FastOneOf.cs +152 -152
- package/Runtime/Core/OneOf/None.cs +4 -4
- package/Runtime/Core/Random/AbstractRandom.cs +561 -561
- package/Runtime/Core/Random/DotNetRandom.cs +52 -52
- package/Runtime/Core/Random/DotNetRandom.cs.meta +2 -2
- package/Runtime/Core/Random/IRandom.cs +160 -160
- package/Runtime/Core/Random/NativePcgRandom.cs +97 -97
- package/Runtime/Core/Random/PRNG.cs +7 -7
- package/Runtime/Core/Random/PRNG.cs.meta +2 -2
- package/Runtime/Core/Random/PcgRandom.cs +149 -149
- package/Runtime/Core/Random/PerlinNoise.cs +369 -369
- package/Runtime/Core/Random/PerlinNoise.cs.meta +2 -2
- package/Runtime/Core/Random/RandomState.cs +131 -131
- package/Runtime/Core/Random/RandomUtilities.cs +26 -26
- package/Runtime/Core/Random/RandomUtilities.cs.meta +11 -11
- package/Runtime/Core/Random/RomuDuo.cs +116 -116
- package/Runtime/Core/Random/RomuDuo.cs.meta +2 -2
- package/Runtime/Core/Random/SplitMix64.cs +94 -94
- package/Runtime/Core/Random/SplitMix64.cs.meta +2 -2
- package/Runtime/Core/Random/SquirrelRandom.cs +84 -84
- package/Runtime/Core/Random/SystemRandom.cs +162 -162
- package/Runtime/Core/Random/ThreadLocalRandom.cs +12 -12
- package/Runtime/Core/Random/UnityRandom.cs +57 -57
- package/Runtime/Core/Random/UnityRandom.cs.meta +11 -11
- package/Runtime/Core/Random/WyRandom.cs +121 -121
- package/Runtime/Core/Random/WyRandom.cs.meta +2 -2
- package/Runtime/Core/Random/XorShiftRandom.cs +47 -47
- package/Runtime/Core/Random/XorShiftRandom.cs.meta +11 -11
- package/Runtime/Core/Random/XorShiroRandom.cs +117 -117
- package/Runtime/Core/Random/XorShiroRandom.cs.meta +2 -2
- package/Runtime/Core/Serialization/JsonConverters/Vector2Converter.cs +74 -74
- package/Runtime/Core/Serialization/JsonConverters/Vector3Converter.cs +81 -81
- package/Runtime/Core/Serialization/Serializer.cs +184 -184
- package/Runtime/Core/Threading/SingleThreadedThreadPool.cs +107 -107
- package/Runtime/Protobuf-Net/System.Buffers.dll.meta +33 -33
- package/Runtime/Protobuf-Net/System.Collections.Immutable.dll.meta +33 -33
- package/Runtime/Protobuf-Net/System.Collections.Immutable.xml +5379 -5379
- package/Runtime/Protobuf-Net/System.Collections.Immutable.xml.meta +7 -7
- package/Runtime/Protobuf-Net/System.Numerics.Vectors.dll.meta +33 -33
- package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.dll.meta +33 -33
- package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.xml +290 -290
- package/Runtime/Protobuf-Net/System.Runtime.CompilerServices.Unsafe.xml.meta +7 -7
- package/Runtime/Protobuf-Net/protobuf-net.Core.dll.meta +33 -33
- package/Runtime/Protobuf-Net/protobuf-net.dll.meta +33 -33
- package/Runtime/UI/LayeredImage.cs +364 -364
- package/Runtime/UI/LayeredImage.cs.meta +2 -2
- package/Runtime/UI.meta +2 -2
- package/Runtime/Utils/AnimationEventEqualityComparer.cs +161 -161
- package/Runtime/Utils/AnimatorEnumStateMachine.cs +88 -88
- package/Runtime/Utils/Buffers.cs +32 -32
- package/Runtime/Utils/CenterPointOffset.cs +30 -30
- package/Runtime/Utils/CenterPointOffset.cs.meta +2 -2
- package/Runtime/Utils/CircleLineRenderer.cs +134 -134
- package/Runtime/Utils/CoroutineHandler.cs +4 -4
- package/Runtime/Utils/CoroutineHandler.cs.meta +2 -2
- package/Runtime/Utils/MatchColliderToSprite.cs +94 -94
- package/Runtime/Utils/MatchColliderToSprite.cs.meta +2 -2
- package/Runtime/Utils/Oscillator.cs +27 -27
- package/Runtime/Utils/RuntimeSingleton.cs +57 -57
- package/Runtime/Utils/RuntimeSingleton.cs.meta +11 -11
- package/Runtime/Utils/SetTextureImportData.cs +69 -69
- package/Runtime/Utils/SpriteRendererMetadata.cs +312 -312
- package/Runtime/Utils/SpriteRendererMetadata.cs.meta +2 -2
- package/Runtime/Utils/SpriteRendererSyncer.cs +100 -100
- package/Runtime/Utils/SpriteRendererSyncer.cs.meta +2 -2
- package/Runtime/Utils/TextureScale.cs +179 -179
- package/Runtime/Utils/TextureScale.cs.meta +2 -2
- package/Runtime/WallstopStudios.UnityHelpers.asmdef +13 -13
- package/Tests/Runtime/Attributes/ChildComponentTests.cs +81 -81
- package/Tests/Runtime/Attributes/Components/ExpectChildSpriteRenderers.cs +28 -28
- package/Tests/Runtime/Attributes/Components/ExpectParentSpriteRenderers.cs +28 -28
- package/Tests/Runtime/Attributes/ParentComponentTests.cs +68 -68
- package/Tests/Runtime/Components/RelationalComponentTester.cs +34 -34
- package/Tests/Runtime/Components/RelationalComponentTester.cs.meta +2 -2
- package/Tests/Runtime/Components.meta +2 -2
- package/Tests/Runtime/DataStructures/BalancedKDTreeTests.cs +14 -14
- package/Tests/Runtime/DataStructures/BalancedKDTreeTests.cs.meta +11 -11
- package/Tests/Runtime/DataStructures/CyclicBufferTests.cs +324 -324
- package/Tests/Runtime/DataStructures/QuadTreeTests.cs +14 -14
- package/Tests/Runtime/DataStructures/QuadTreeTests.cs.meta +11 -11
- package/Tests/Runtime/DataStructures/SpatialTreeTests.cs +130 -130
- package/Tests/Runtime/DataStructures/SpatialTreeTests.cs.meta +11 -11
- package/Tests/Runtime/DataStructures/UnbalancedKDTreeTests.cs +14 -14
- package/Tests/Runtime/DataStructures/UnbalancedKDTreeTests.cs.meta +11 -11
- package/Tests/Runtime/DataStructures.meta +8 -8
- package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs +439 -439
- package/Tests/Runtime/Extensions/DictionaryExtensionTests.cs.meta +2 -2
- package/Tests/Runtime/Extensions/IListExtensionTests.cs +76 -76
- package/Tests/Runtime/Extensions/RandomExtensionTests.cs +27 -27
- package/Tests/Runtime/Extensions/RandomExtensionTests.cs.meta +2 -2
- package/Tests/Runtime/Extensions/StringExtensionTests.cs +31 -31
- package/Tests/Runtime/Extensions/StringExtensionTests.cs.meta +2 -2
- package/Tests/Runtime/Extensions.meta +2 -2
- package/Tests/Runtime/Helper/ArrayConverterTests.cs +19 -19
- package/Tests/Runtime/Helper/ArrayConverterTests.cs.meta +2 -2
- package/Tests/Runtime/Helper/ObjectHelperTests.cs +402 -402
- package/Tests/Runtime/Helper/ObjectHelperTests.cs.meta +2 -2
- package/Tests/Runtime/Helper/WallMathTests.cs +233 -233
- package/Tests/Runtime/Helper/WallMathTests.cs.meta +2 -2
- package/Tests/Runtime/Helper.meta +2 -2
- package/Tests/Runtime/Performance/KDTreePerformanceTests.cs +14 -14
- package/Tests/Runtime/Performance/KDTreePerformanceTests.cs.meta +11 -11
- package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs +14 -14
- package/Tests/Runtime/Performance/QuadTreePerformanceTests.cs.meta +11 -11
- package/Tests/Runtime/Performance/RandomPerformanceTests.cs +139 -139
- package/Tests/Runtime/Performance/RandomPerformanceTests.cs.meta +11 -11
- package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs +37 -37
- package/Tests/Runtime/Performance/RelationComponentPerformanceTests.cs.meta +2 -2
- package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs +154 -154
- package/Tests/Runtime/Performance/SpatialTreePerformanceTest.cs.meta +11 -11
- package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs +14 -14
- package/Tests/Runtime/Performance/UnbalancedKDTreeTests.cs.meta +11 -11
- package/Tests/Runtime/Performance.meta +8 -8
- package/Tests/Runtime/Random/DotNetRandomTests.cs +9 -9
- package/Tests/Runtime/Random/DotNetRandomTests.cs.meta +2 -2
- package/Tests/Runtime/Random/PcgRandomTests.cs +9 -9
- package/Tests/Runtime/Random/PcgRandomTests.cs.meta +11 -11
- package/Tests/Runtime/Random/RandomTestBase.cs +787 -787
- package/Tests/Runtime/Random/RandomTestBase.cs.meta +11 -11
- package/Tests/Runtime/Random/RomuDuoRandomTests.cs +9 -9
- package/Tests/Runtime/Random/RomuDuoRandomTests.cs.meta +2 -2
- package/Tests/Runtime/Random/SplitMix64RandomTests.cs +9 -9
- package/Tests/Runtime/Random/SplitMix64RandomTests.cs.meta +2 -2
- package/Tests/Runtime/Random/SquirrelRandomTests.cs +14 -14
- package/Tests/Runtime/Random/SquirrelRandomTests.cs.meta +11 -11
- package/Tests/Runtime/Random/SystemRandomTests.cs +10 -10
- package/Tests/Runtime/Random/SystemRandomTests.cs.meta +11 -11
- package/Tests/Runtime/Random/UnityRandomTests.cs +9 -9
- package/Tests/Runtime/Random/UnityRandomTests.cs.meta +11 -11
- package/Tests/Runtime/Random/WyRandomTests.cs +9 -9
- package/Tests/Runtime/Random/WyRandomTests.cs.meta +2 -2
- package/Tests/Runtime/Random/XorShiftRandomTests.cs +9 -9
- package/Tests/Runtime/Random/XorShiftRandomTests.cs.meta +11 -11
- package/Tests/Runtime/Random/XorShiroRandomTests.cs +9 -9
- package/Tests/Runtime/Random/XorShiroRandomTests.cs.meta +2 -2
- package/Tests/Runtime/Random.meta +8 -8
- package/Tests/Runtime/Serialization/JsonSerializationTest.cs +84 -84
- package/Tests/Runtime/Serialization/JsonSerializationTest.cs.meta +2 -2
- package/Tests/Runtime/Serialization.meta +2 -2
- package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs +399 -399
- package/Tests/Runtime/Utils/SpriteRendererMetadataTests.cs.meta +2 -2
- package/Tests/Runtime/Utils.meta +2 -2
- package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef +22 -22
- package/Tests/Runtime/WallstopStudios.UnityHelpers.Tests.Runtime.asmdef.meta +7 -7
- package/Tests/Runtime.meta +8 -8
- package/package.json +38 -38
|
@@ -1,74 +1,74 @@
|
|
|
1
|
-
namespace UnityHelpers.Core.Serialization.JsonConverters
|
|
2
|
-
{
|
|
3
|
-
using System;
|
|
4
|
-
using System.Text.Json;
|
|
5
|
-
using System.Text.Json.Serialization;
|
|
6
|
-
using UnityEngine;
|
|
7
|
-
|
|
8
|
-
public sealed class Vector2Converter : JsonConverter<Vector2>
|
|
9
|
-
{
|
|
10
|
-
public static readonly Vector2Converter Instance = new();
|
|
11
|
-
|
|
12
|
-
private Vector2Converter() { }
|
|
13
|
-
|
|
14
|
-
public override Vector2 Read(
|
|
15
|
-
ref Utf8JsonReader reader,
|
|
16
|
-
Type typeToConvert,
|
|
17
|
-
JsonSerializerOptions options
|
|
18
|
-
)
|
|
19
|
-
{
|
|
20
|
-
if (reader.TokenType != JsonTokenType.StartObject)
|
|
21
|
-
{
|
|
22
|
-
throw new JsonException($"Invalid token type {reader.TokenType}");
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
float x = 0,
|
|
26
|
-
y = 0;
|
|
27
|
-
|
|
28
|
-
while (reader.Read())
|
|
29
|
-
{
|
|
30
|
-
if (reader.TokenType == JsonTokenType.EndObject)
|
|
31
|
-
{
|
|
32
|
-
return new Vector2(x, y);
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
if (reader.TokenType == JsonTokenType.PropertyName)
|
|
36
|
-
{
|
|
37
|
-
string propertyName = reader.GetString();
|
|
38
|
-
reader.Read();
|
|
39
|
-
switch (propertyName)
|
|
40
|
-
{
|
|
41
|
-
case "x":
|
|
42
|
-
{
|
|
43
|
-
x = reader.GetSingle();
|
|
44
|
-
break;
|
|
45
|
-
}
|
|
46
|
-
case "y":
|
|
47
|
-
{
|
|
48
|
-
y = reader.GetSingle();
|
|
49
|
-
break;
|
|
50
|
-
}
|
|
51
|
-
default:
|
|
52
|
-
{
|
|
53
|
-
throw new JsonException($"Unknown property: {propertyName}");
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
throw new JsonException("Incomplete JSON for Vector2");
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
public override void Write(
|
|
63
|
-
Utf8JsonWriter writer,
|
|
64
|
-
Vector2 value,
|
|
65
|
-
JsonSerializerOptions options
|
|
66
|
-
)
|
|
67
|
-
{
|
|
68
|
-
writer.WriteStartObject();
|
|
69
|
-
writer.WriteNumber("x", value.x);
|
|
70
|
-
writer.WriteNumber("y", value.y);
|
|
71
|
-
writer.WriteEndObject();
|
|
72
|
-
}
|
|
73
|
-
}
|
|
74
|
-
}
|
|
1
|
+
namespace UnityHelpers.Core.Serialization.JsonConverters
|
|
2
|
+
{
|
|
3
|
+
using System;
|
|
4
|
+
using System.Text.Json;
|
|
5
|
+
using System.Text.Json.Serialization;
|
|
6
|
+
using UnityEngine;
|
|
7
|
+
|
|
8
|
+
public sealed class Vector2Converter : JsonConverter<Vector2>
|
|
9
|
+
{
|
|
10
|
+
public static readonly Vector2Converter Instance = new();
|
|
11
|
+
|
|
12
|
+
private Vector2Converter() { }
|
|
13
|
+
|
|
14
|
+
public override Vector2 Read(
|
|
15
|
+
ref Utf8JsonReader reader,
|
|
16
|
+
Type typeToConvert,
|
|
17
|
+
JsonSerializerOptions options
|
|
18
|
+
)
|
|
19
|
+
{
|
|
20
|
+
if (reader.TokenType != JsonTokenType.StartObject)
|
|
21
|
+
{
|
|
22
|
+
throw new JsonException($"Invalid token type {reader.TokenType}");
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
float x = 0,
|
|
26
|
+
y = 0;
|
|
27
|
+
|
|
28
|
+
while (reader.Read())
|
|
29
|
+
{
|
|
30
|
+
if (reader.TokenType == JsonTokenType.EndObject)
|
|
31
|
+
{
|
|
32
|
+
return new Vector2(x, y);
|
|
33
|
+
}
|
|
34
|
+
|
|
35
|
+
if (reader.TokenType == JsonTokenType.PropertyName)
|
|
36
|
+
{
|
|
37
|
+
string propertyName = reader.GetString();
|
|
38
|
+
reader.Read();
|
|
39
|
+
switch (propertyName)
|
|
40
|
+
{
|
|
41
|
+
case "x":
|
|
42
|
+
{
|
|
43
|
+
x = reader.GetSingle();
|
|
44
|
+
break;
|
|
45
|
+
}
|
|
46
|
+
case "y":
|
|
47
|
+
{
|
|
48
|
+
y = reader.GetSingle();
|
|
49
|
+
break;
|
|
50
|
+
}
|
|
51
|
+
default:
|
|
52
|
+
{
|
|
53
|
+
throw new JsonException($"Unknown property: {propertyName}");
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
throw new JsonException("Incomplete JSON for Vector2");
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
public override void Write(
|
|
63
|
+
Utf8JsonWriter writer,
|
|
64
|
+
Vector2 value,
|
|
65
|
+
JsonSerializerOptions options
|
|
66
|
+
)
|
|
67
|
+
{
|
|
68
|
+
writer.WriteStartObject();
|
|
69
|
+
writer.WriteNumber("x", value.x);
|
|
70
|
+
writer.WriteNumber("y", value.y);
|
|
71
|
+
writer.WriteEndObject();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
@@ -1,81 +1,81 @@
|
|
|
1
|
-
namespace UnityHelpers.Core.Serialization.JsonConverters
|
|
2
|
-
{
|
|
3
|
-
using System;
|
|
4
|
-
using System.Text.Json;
|
|
5
|
-
using System.Text.Json.Serialization;
|
|
6
|
-
using UnityEngine;
|
|
7
|
-
|
|
8
|
-
public sealed class Vector3Converter : JsonConverter<Vector3>
|
|
9
|
-
{
|
|
10
|
-
public static readonly Vector3Converter Instance = new();
|
|
11
|
-
|
|
12
|
-
private Vector3Converter() { }
|
|
13
|
-
|
|
14
|
-
public override Vector3 Read(
|
|
15
|
-
ref Utf8JsonReader reader,
|
|
16
|
-
Type typeToConvert,
|
|
17
|
-
JsonSerializerOptions options
|
|
18
|
-
)
|
|
19
|
-
{
|
|
20
|
-
if (reader.TokenType != JsonTokenType.StartObject)
|
|
21
|
-
{
|
|
22
|
-
throw new JsonException($"Invalid token type {reader.TokenType}");
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
float x = 0,
|
|
26
|
-
y = 0,
|
|
27
|
-
z = 0;
|
|
28
|
-
|
|
29
|
-
while (reader.Read())
|
|
30
|
-
{
|
|
31
|
-
if (reader.TokenType == JsonTokenType.EndObject)
|
|
32
|
-
{
|
|
33
|
-
return new Vector3(x, y, z);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
if (reader.TokenType == JsonTokenType.PropertyName)
|
|
37
|
-
{
|
|
38
|
-
string propertyName = reader.GetString();
|
|
39
|
-
reader.Read();
|
|
40
|
-
switch (propertyName)
|
|
41
|
-
{
|
|
42
|
-
case "x":
|
|
43
|
-
{
|
|
44
|
-
x = reader.GetSingle();
|
|
45
|
-
break;
|
|
46
|
-
}
|
|
47
|
-
case "y":
|
|
48
|
-
{
|
|
49
|
-
y = reader.GetSingle();
|
|
50
|
-
break;
|
|
51
|
-
}
|
|
52
|
-
case "z":
|
|
53
|
-
{
|
|
54
|
-
z = reader.GetSingle();
|
|
55
|
-
break;
|
|
56
|
-
}
|
|
57
|
-
default:
|
|
58
|
-
{
|
|
59
|
-
throw new JsonException($"Unknown property: {propertyName}");
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
}
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
throw new JsonException("Incomplete JSON for Vector3");
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
public override void Write(
|
|
69
|
-
Utf8JsonWriter writer,
|
|
70
|
-
Vector3 value,
|
|
71
|
-
JsonSerializerOptions options
|
|
72
|
-
)
|
|
73
|
-
{
|
|
74
|
-
writer.WriteStartObject();
|
|
75
|
-
writer.WriteNumber("x", value.x);
|
|
76
|
-
writer.WriteNumber("y", value.y);
|
|
77
|
-
writer.WriteNumber("z", value.z);
|
|
78
|
-
writer.WriteEndObject();
|
|
79
|
-
}
|
|
80
|
-
}
|
|
81
|
-
}
|
|
1
|
+
namespace UnityHelpers.Core.Serialization.JsonConverters
|
|
2
|
+
{
|
|
3
|
+
using System;
|
|
4
|
+
using System.Text.Json;
|
|
5
|
+
using System.Text.Json.Serialization;
|
|
6
|
+
using UnityEngine;
|
|
7
|
+
|
|
8
|
+
public sealed class Vector3Converter : JsonConverter<Vector3>
|
|
9
|
+
{
|
|
10
|
+
public static readonly Vector3Converter Instance = new();
|
|
11
|
+
|
|
12
|
+
private Vector3Converter() { }
|
|
13
|
+
|
|
14
|
+
public override Vector3 Read(
|
|
15
|
+
ref Utf8JsonReader reader,
|
|
16
|
+
Type typeToConvert,
|
|
17
|
+
JsonSerializerOptions options
|
|
18
|
+
)
|
|
19
|
+
{
|
|
20
|
+
if (reader.TokenType != JsonTokenType.StartObject)
|
|
21
|
+
{
|
|
22
|
+
throw new JsonException($"Invalid token type {reader.TokenType}");
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
float x = 0,
|
|
26
|
+
y = 0,
|
|
27
|
+
z = 0;
|
|
28
|
+
|
|
29
|
+
while (reader.Read())
|
|
30
|
+
{
|
|
31
|
+
if (reader.TokenType == JsonTokenType.EndObject)
|
|
32
|
+
{
|
|
33
|
+
return new Vector3(x, y, z);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
if (reader.TokenType == JsonTokenType.PropertyName)
|
|
37
|
+
{
|
|
38
|
+
string propertyName = reader.GetString();
|
|
39
|
+
reader.Read();
|
|
40
|
+
switch (propertyName)
|
|
41
|
+
{
|
|
42
|
+
case "x":
|
|
43
|
+
{
|
|
44
|
+
x = reader.GetSingle();
|
|
45
|
+
break;
|
|
46
|
+
}
|
|
47
|
+
case "y":
|
|
48
|
+
{
|
|
49
|
+
y = reader.GetSingle();
|
|
50
|
+
break;
|
|
51
|
+
}
|
|
52
|
+
case "z":
|
|
53
|
+
{
|
|
54
|
+
z = reader.GetSingle();
|
|
55
|
+
break;
|
|
56
|
+
}
|
|
57
|
+
default:
|
|
58
|
+
{
|
|
59
|
+
throw new JsonException($"Unknown property: {propertyName}");
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
throw new JsonException("Incomplete JSON for Vector3");
|
|
66
|
+
}
|
|
67
|
+
|
|
68
|
+
public override void Write(
|
|
69
|
+
Utf8JsonWriter writer,
|
|
70
|
+
Vector3 value,
|
|
71
|
+
JsonSerializerOptions options
|
|
72
|
+
)
|
|
73
|
+
{
|
|
74
|
+
writer.WriteStartObject();
|
|
75
|
+
writer.WriteNumber("x", value.x);
|
|
76
|
+
writer.WriteNumber("y", value.y);
|
|
77
|
+
writer.WriteNumber("z", value.z);
|
|
78
|
+
writer.WriteEndObject();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
@@ -1,184 +1,184 @@
|
|
|
1
|
-
namespace UnityHelpers.Core.Serialization
|
|
2
|
-
{
|
|
3
|
-
using System;
|
|
4
|
-
using System.ComponentModel;
|
|
5
|
-
using System.IO;
|
|
6
|
-
using System.Runtime.Serialization.Formatters.Binary;
|
|
7
|
-
using System.Text;
|
|
8
|
-
using System.Text.Json;
|
|
9
|
-
using System.Text.Json.Serialization;
|
|
10
|
-
using Extension;
|
|
11
|
-
using JsonConverters;
|
|
12
|
-
|
|
13
|
-
internal static class SerializerEncoding
|
|
14
|
-
{
|
|
15
|
-
public static readonly Encoding Encoding;
|
|
16
|
-
public static readonly JsonSerializerOptions NormalJsonOptions;
|
|
17
|
-
public static readonly JsonSerializerOptions PrettyJsonOptions;
|
|
18
|
-
|
|
19
|
-
static SerializerEncoding()
|
|
20
|
-
{
|
|
21
|
-
Encoding = Encoding.UTF8;
|
|
22
|
-
NormalJsonOptions = new JsonSerializerOptions
|
|
23
|
-
{
|
|
24
|
-
IgnoreReadOnlyFields = false,
|
|
25
|
-
IgnoreReadOnlyProperties = false,
|
|
26
|
-
ReferenceHandler = ReferenceHandler.IgnoreCycles,
|
|
27
|
-
IncludeFields = true,
|
|
28
|
-
PropertyNameCaseInsensitive = true,
|
|
29
|
-
Converters =
|
|
30
|
-
{
|
|
31
|
-
new JsonStringEnumConverter(),
|
|
32
|
-
Vector3Converter.Instance,
|
|
33
|
-
Vector2Converter.Instance,
|
|
34
|
-
},
|
|
35
|
-
};
|
|
36
|
-
|
|
37
|
-
PrettyJsonOptions = new JsonSerializerOptions
|
|
38
|
-
{
|
|
39
|
-
IgnoreReadOnlyFields = false,
|
|
40
|
-
IgnoreReadOnlyProperties = false,
|
|
41
|
-
ReferenceHandler = ReferenceHandler.IgnoreCycles,
|
|
42
|
-
PropertyNameCaseInsensitive = true,
|
|
43
|
-
IncludeFields = true,
|
|
44
|
-
Converters =
|
|
45
|
-
{
|
|
46
|
-
new JsonStringEnumConverter(),
|
|
47
|
-
Vector3Converter.Instance,
|
|
48
|
-
Vector2Converter.Instance,
|
|
49
|
-
},
|
|
50
|
-
WriteIndented = true,
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
public enum SerializationType
|
|
56
|
-
{
|
|
57
|
-
SystemBinary,
|
|
58
|
-
Protobuf,
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
public static class Serializer
|
|
62
|
-
{
|
|
63
|
-
public static T Deserialize<T>(byte[] serialized, SerializationType serializationType)
|
|
64
|
-
{
|
|
65
|
-
switch (serializationType)
|
|
66
|
-
{
|
|
67
|
-
case SerializationType.SystemBinary:
|
|
68
|
-
return BinaryDeserialize<T>(serialized);
|
|
69
|
-
case SerializationType.Protobuf:
|
|
70
|
-
return ProtoDeserialize<T>(serialized);
|
|
71
|
-
default:
|
|
72
|
-
throw new InvalidEnumArgumentException(
|
|
73
|
-
nameof(serializationType),
|
|
74
|
-
(int)serializationType,
|
|
75
|
-
typeof(SerializationType)
|
|
76
|
-
);
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
public static byte[] Serialize<T>(T instance, SerializationType serializationType)
|
|
81
|
-
{
|
|
82
|
-
switch (serializationType)
|
|
83
|
-
{
|
|
84
|
-
case SerializationType.SystemBinary:
|
|
85
|
-
return BinarySerialize(instance);
|
|
86
|
-
case SerializationType.Protobuf:
|
|
87
|
-
return ProtoSerialize(instance);
|
|
88
|
-
default:
|
|
89
|
-
throw new InvalidEnumArgumentException(
|
|
90
|
-
nameof(serializationType),
|
|
91
|
-
(int)serializationType,
|
|
92
|
-
typeof(SerializationType)
|
|
93
|
-
);
|
|
94
|
-
}
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
public static T BinaryDeserialize<T>(byte[] data)
|
|
98
|
-
{
|
|
99
|
-
using MemoryStream memoryStream = new(data);
|
|
100
|
-
BinaryFormatter binaryFormatter = new();
|
|
101
|
-
memoryStream.Position = 0;
|
|
102
|
-
return (T)binaryFormatter.Deserialize(memoryStream);
|
|
103
|
-
}
|
|
104
|
-
|
|
105
|
-
public static byte[] BinarySerialize<T>(T input)
|
|
106
|
-
{
|
|
107
|
-
using MemoryStream memoryStream = new();
|
|
108
|
-
BinaryFormatter binaryFormatter = new();
|
|
109
|
-
binaryFormatter.Serialize(memoryStream, input);
|
|
110
|
-
return memoryStream.ToArray();
|
|
111
|
-
}
|
|
112
|
-
|
|
113
|
-
public static T ProtoDeserialize<T>(byte[] data)
|
|
114
|
-
{
|
|
115
|
-
using MemoryStream memoryStream = new(data);
|
|
116
|
-
return ProtoBuf.Serializer.Deserialize<T>(memoryStream);
|
|
117
|
-
}
|
|
118
|
-
|
|
119
|
-
public static T ProtoDeserialize<T>(byte[] data, Type type)
|
|
120
|
-
{
|
|
121
|
-
using MemoryStream memoryStream = new(data);
|
|
122
|
-
return (T)ProtoBuf.Serializer.Deserialize(type, memoryStream);
|
|
123
|
-
}
|
|
124
|
-
|
|
125
|
-
public static byte[] ProtoSerialize<T>(T input)
|
|
126
|
-
{
|
|
127
|
-
using MemoryStream memoryStream = new();
|
|
128
|
-
ProtoBuf.Serializer.Serialize(memoryStream, input);
|
|
129
|
-
return memoryStream.ToArray();
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
public static T JsonDeserialize<T>(string data, Type type = null)
|
|
133
|
-
{
|
|
134
|
-
return (T)
|
|
135
|
-
JsonSerializer.Deserialize(
|
|
136
|
-
data,
|
|
137
|
-
type ?? typeof(T),
|
|
138
|
-
SerializerEncoding.NormalJsonOptions
|
|
139
|
-
);
|
|
140
|
-
}
|
|
141
|
-
|
|
142
|
-
public static byte[] JsonSerialize<T>(T input)
|
|
143
|
-
{
|
|
144
|
-
return JsonStringify(input).GetBytes();
|
|
145
|
-
}
|
|
146
|
-
|
|
147
|
-
public static string JsonStringify<T>(T input, bool pretty = false)
|
|
148
|
-
{
|
|
149
|
-
JsonSerializerOptions options = pretty
|
|
150
|
-
? SerializerEncoding.PrettyJsonOptions
|
|
151
|
-
: SerializerEncoding.NormalJsonOptions;
|
|
152
|
-
Type parameterType = typeof(T);
|
|
153
|
-
if (
|
|
154
|
-
parameterType.IsAbstract
|
|
155
|
-
|| parameterType.IsInterface
|
|
156
|
-
|| parameterType == typeof(object)
|
|
157
|
-
)
|
|
158
|
-
{
|
|
159
|
-
object data = input;
|
|
160
|
-
if (data == null)
|
|
161
|
-
{
|
|
162
|
-
return "{}";
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
Type type = data.GetType();
|
|
166
|
-
return JsonSerializer.Serialize(data, type, options);
|
|
167
|
-
}
|
|
168
|
-
|
|
169
|
-
return JsonSerializer.Serialize(input, options);
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
public static T ReadFromJsonFile<T>(string path)
|
|
173
|
-
{
|
|
174
|
-
string settingsAsText = File.ReadAllText(path, SerializerEncoding.Encoding);
|
|
175
|
-
return JsonDeserialize<T>(settingsAsText);
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
public static void WriteToJsonFile<T>(T input, string path, bool pretty = true)
|
|
179
|
-
{
|
|
180
|
-
string jsonAsText = JsonStringify(input, pretty);
|
|
181
|
-
File.WriteAllText(path, jsonAsText);
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
}
|
|
1
|
+
namespace UnityHelpers.Core.Serialization
|
|
2
|
+
{
|
|
3
|
+
using System;
|
|
4
|
+
using System.ComponentModel;
|
|
5
|
+
using System.IO;
|
|
6
|
+
using System.Runtime.Serialization.Formatters.Binary;
|
|
7
|
+
using System.Text;
|
|
8
|
+
using System.Text.Json;
|
|
9
|
+
using System.Text.Json.Serialization;
|
|
10
|
+
using Extension;
|
|
11
|
+
using JsonConverters;
|
|
12
|
+
|
|
13
|
+
internal static class SerializerEncoding
|
|
14
|
+
{
|
|
15
|
+
public static readonly Encoding Encoding;
|
|
16
|
+
public static readonly JsonSerializerOptions NormalJsonOptions;
|
|
17
|
+
public static readonly JsonSerializerOptions PrettyJsonOptions;
|
|
18
|
+
|
|
19
|
+
static SerializerEncoding()
|
|
20
|
+
{
|
|
21
|
+
Encoding = Encoding.UTF8;
|
|
22
|
+
NormalJsonOptions = new JsonSerializerOptions
|
|
23
|
+
{
|
|
24
|
+
IgnoreReadOnlyFields = false,
|
|
25
|
+
IgnoreReadOnlyProperties = false,
|
|
26
|
+
ReferenceHandler = ReferenceHandler.IgnoreCycles,
|
|
27
|
+
IncludeFields = true,
|
|
28
|
+
PropertyNameCaseInsensitive = true,
|
|
29
|
+
Converters =
|
|
30
|
+
{
|
|
31
|
+
new JsonStringEnumConverter(),
|
|
32
|
+
Vector3Converter.Instance,
|
|
33
|
+
Vector2Converter.Instance,
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
PrettyJsonOptions = new JsonSerializerOptions
|
|
38
|
+
{
|
|
39
|
+
IgnoreReadOnlyFields = false,
|
|
40
|
+
IgnoreReadOnlyProperties = false,
|
|
41
|
+
ReferenceHandler = ReferenceHandler.IgnoreCycles,
|
|
42
|
+
PropertyNameCaseInsensitive = true,
|
|
43
|
+
IncludeFields = true,
|
|
44
|
+
Converters =
|
|
45
|
+
{
|
|
46
|
+
new JsonStringEnumConverter(),
|
|
47
|
+
Vector3Converter.Instance,
|
|
48
|
+
Vector2Converter.Instance,
|
|
49
|
+
},
|
|
50
|
+
WriteIndented = true,
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
public enum SerializationType
|
|
56
|
+
{
|
|
57
|
+
SystemBinary,
|
|
58
|
+
Protobuf,
|
|
59
|
+
}
|
|
60
|
+
|
|
61
|
+
public static class Serializer
|
|
62
|
+
{
|
|
63
|
+
public static T Deserialize<T>(byte[] serialized, SerializationType serializationType)
|
|
64
|
+
{
|
|
65
|
+
switch (serializationType)
|
|
66
|
+
{
|
|
67
|
+
case SerializationType.SystemBinary:
|
|
68
|
+
return BinaryDeserialize<T>(serialized);
|
|
69
|
+
case SerializationType.Protobuf:
|
|
70
|
+
return ProtoDeserialize<T>(serialized);
|
|
71
|
+
default:
|
|
72
|
+
throw new InvalidEnumArgumentException(
|
|
73
|
+
nameof(serializationType),
|
|
74
|
+
(int)serializationType,
|
|
75
|
+
typeof(SerializationType)
|
|
76
|
+
);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
|
|
80
|
+
public static byte[] Serialize<T>(T instance, SerializationType serializationType)
|
|
81
|
+
{
|
|
82
|
+
switch (serializationType)
|
|
83
|
+
{
|
|
84
|
+
case SerializationType.SystemBinary:
|
|
85
|
+
return BinarySerialize(instance);
|
|
86
|
+
case SerializationType.Protobuf:
|
|
87
|
+
return ProtoSerialize(instance);
|
|
88
|
+
default:
|
|
89
|
+
throw new InvalidEnumArgumentException(
|
|
90
|
+
nameof(serializationType),
|
|
91
|
+
(int)serializationType,
|
|
92
|
+
typeof(SerializationType)
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
public static T BinaryDeserialize<T>(byte[] data)
|
|
98
|
+
{
|
|
99
|
+
using MemoryStream memoryStream = new(data);
|
|
100
|
+
BinaryFormatter binaryFormatter = new();
|
|
101
|
+
memoryStream.Position = 0;
|
|
102
|
+
return (T)binaryFormatter.Deserialize(memoryStream);
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
public static byte[] BinarySerialize<T>(T input)
|
|
106
|
+
{
|
|
107
|
+
using MemoryStream memoryStream = new();
|
|
108
|
+
BinaryFormatter binaryFormatter = new();
|
|
109
|
+
binaryFormatter.Serialize(memoryStream, input);
|
|
110
|
+
return memoryStream.ToArray();
|
|
111
|
+
}
|
|
112
|
+
|
|
113
|
+
public static T ProtoDeserialize<T>(byte[] data)
|
|
114
|
+
{
|
|
115
|
+
using MemoryStream memoryStream = new(data);
|
|
116
|
+
return ProtoBuf.Serializer.Deserialize<T>(memoryStream);
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
public static T ProtoDeserialize<T>(byte[] data, Type type)
|
|
120
|
+
{
|
|
121
|
+
using MemoryStream memoryStream = new(data);
|
|
122
|
+
return (T)ProtoBuf.Serializer.Deserialize(type, memoryStream);
|
|
123
|
+
}
|
|
124
|
+
|
|
125
|
+
public static byte[] ProtoSerialize<T>(T input)
|
|
126
|
+
{
|
|
127
|
+
using MemoryStream memoryStream = new();
|
|
128
|
+
ProtoBuf.Serializer.Serialize(memoryStream, input);
|
|
129
|
+
return memoryStream.ToArray();
|
|
130
|
+
}
|
|
131
|
+
|
|
132
|
+
public static T JsonDeserialize<T>(string data, Type type = null)
|
|
133
|
+
{
|
|
134
|
+
return (T)
|
|
135
|
+
JsonSerializer.Deserialize(
|
|
136
|
+
data,
|
|
137
|
+
type ?? typeof(T),
|
|
138
|
+
SerializerEncoding.NormalJsonOptions
|
|
139
|
+
);
|
|
140
|
+
}
|
|
141
|
+
|
|
142
|
+
public static byte[] JsonSerialize<T>(T input)
|
|
143
|
+
{
|
|
144
|
+
return JsonStringify(input).GetBytes();
|
|
145
|
+
}
|
|
146
|
+
|
|
147
|
+
public static string JsonStringify<T>(T input, bool pretty = false)
|
|
148
|
+
{
|
|
149
|
+
JsonSerializerOptions options = pretty
|
|
150
|
+
? SerializerEncoding.PrettyJsonOptions
|
|
151
|
+
: SerializerEncoding.NormalJsonOptions;
|
|
152
|
+
Type parameterType = typeof(T);
|
|
153
|
+
if (
|
|
154
|
+
parameterType.IsAbstract
|
|
155
|
+
|| parameterType.IsInterface
|
|
156
|
+
|| parameterType == typeof(object)
|
|
157
|
+
)
|
|
158
|
+
{
|
|
159
|
+
object data = input;
|
|
160
|
+
if (data == null)
|
|
161
|
+
{
|
|
162
|
+
return "{}";
|
|
163
|
+
}
|
|
164
|
+
|
|
165
|
+
Type type = data.GetType();
|
|
166
|
+
return JsonSerializer.Serialize(data, type, options);
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
return JsonSerializer.Serialize(input, options);
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
public static T ReadFromJsonFile<T>(string path)
|
|
173
|
+
{
|
|
174
|
+
string settingsAsText = File.ReadAllText(path, SerializerEncoding.Encoding);
|
|
175
|
+
return JsonDeserialize<T>(settingsAsText);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
public static void WriteToJsonFile<T>(T input, string path, bool pretty = true)
|
|
179
|
+
{
|
|
180
|
+
string jsonAsText = JsonStringify(input, pretty);
|
|
181
|
+
File.WriteAllText(path, jsonAsText);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|