Skip to content

Commit 183e7af

Browse files
committed
Preserve serialized type data for future use
1 parent f380f8f commit 183e7af

18 files changed

Lines changed: 152 additions & 54 deletions

src/AssetStudio.Extended.MonoBehaviours/AssetStudio.Extended.MonoBehaviours.csproj

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -50,21 +50,23 @@
5050
<Compile Include="Extensions\TypeExtensions.cs" />
5151
<Compile Include="ISimpleTypeConverter.cs" />
5252
<Compile Include="Properties\AssemblyInfo.cs" />
53-
<Compile Include="Serialization\CustomType.cs" />
5453
<Compile Include="Serialization\DefaultConverters\ByteToBooleanConverter.cs" />
54+
<Compile Include="Serialization\Serialized\CustomType.cs" />
55+
<Compile Include="Serialization\Serialized\ObjectArray.cs" />
56+
<Compile Include="Serialization\Serialized\ObjectDictionary.cs" />
57+
<Compile Include="Serialization\Serialized\RawData.cs" />
5558
<Compile Include="Serialization\Serializers\ISerializationContext.cs" />
5659
<Compile Include="Serialization\Serializers\ITypedSerializer.cs" />
5760
<Compile Include="Serialization\Serializers\SerializationContextCreator.cs" />
5861
<Compile Include="Serialization\Serializers\SerializationContextBase.cs" />
59-
<Compile Include="Serialization\Serializers\Static\ConstructorManager.cs" />
60-
<Compile Include="Serialization\Serializers\Static\MemberSetter.cs" />
61-
<Compile Include="Serialization\Serializers\Static\StaticSerializationContext.cs" />
62-
<Compile Include="Serialization\Serializers\Static\TypedSerializerManager.cs" />
63-
<Compile Include="Serialization\Serializers\Static\TypeConverterManager.cs" />
64-
<Compile Include="Serialization\Serializers\Static\TypedSerializer.cs" />
65-
<Compile Include="Serialization\Serializers\Static\TypedSerializer.Setters.cs" />
62+
<Compile Include="Serialization\Serializers\Dynamic\ConstructorManager.cs" />
63+
<Compile Include="Serialization\Serializers\Dynamic\MemberSetter.cs" />
64+
<Compile Include="Serialization\Serializers\Dynamic\DynamicSerializationContext.cs" />
65+
<Compile Include="Serialization\Serializers\Dynamic\TypedSerializerManager.cs" />
66+
<Compile Include="Serialization\Serializers\Dynamic\TypeConverterManager.cs" />
67+
<Compile Include="Serialization\Serializers\Dynamic\TypedSerializer.cs" />
68+
<Compile Include="Serialization\Serializers\Dynamic\TypedSerializer.Setters.cs" />
6669
<Compile Include="Serialization\Serializers\TypedSerializerBase.cs" />
67-
<Compile Include="Serialization\RawData.cs" />
6870
<Compile Include="Serialization\ScriptableObjectAttribute.cs" />
6971
<Compile Include="Serialization\ScriptableObjectIgnoreAttribute.cs" />
7072
<Compile Include="Serialization\ScriptableObjectPropertyAttribute.cs" />

src/AssetStudio.Extended.MonoBehaviours/Serialization/RawData.cs

Lines changed: 0 additions & 14 deletions
This file was deleted.

src/AssetStudio.Extended.MonoBehaviours/Serialization/ScriptableObjectSerializer.cs

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,15 @@
11
using System;
22
using System.Diagnostics;
33
using AssetStudio.Extended.MonoBehaviours.Serialization.DefaultConverters;
4+
using AssetStudio.Extended.MonoBehaviours.Serialization.Serialized;
45
using AssetStudio.Extended.MonoBehaviours.Serialization.Serializers;
56
using JetBrains.Annotations;
67

78
namespace AssetStudio.Extended.MonoBehaviours.Serialization {
89
public sealed class ScriptableObjectSerializer {
910

1011
public ScriptableObjectSerializer() {
11-
_context = new Lazy<ISerializationContext>(SerializationContextCreator.CreateStatic);
12+
_context = new Lazy<ISerializationContext>(SerializationContextCreator.Create);
1213

1314
// In old versions(?) Unity serializes booleans as bytes
1415
WithConverter<ByteToBooleanConverter>();

src/AssetStudio.Extended.MonoBehaviours/Serialization/CustomType.cs renamed to src/AssetStudio.Extended.MonoBehaviours/Serialization/Serialized/CustomType.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
using System.Runtime.CompilerServices;
55
using JetBrains.Annotations;
66

7-
namespace AssetStudio.Extended.MonoBehaviours.Serialization {
7+
namespace AssetStudio.Extended.MonoBehaviours.Serialization.Serialized {
88
public sealed class CustomType : IReadOnlyDictionary<string, object> {
99

1010
internal CustomType([NotNull] string typeName, [NotNull] Dictionary<string, object> variables) {
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
using System;
2+
using JetBrains.Annotations;
3+
4+
namespace AssetStudio.Extended.MonoBehaviours.Serialization.Serialized {
5+
public sealed class ObjectArray {
6+
7+
internal ObjectArray([NotNull, ItemCanBeNull] object[] array, [NotNull] Type elementType) {
8+
Array = array;
9+
ElementType = elementType;
10+
}
11+
12+
[NotNull, ItemCanBeNull]
13+
public object[] Array { get; }
14+
15+
/// <summary>
16+
/// Element type. Can be primitive types (including string), <see cref="CustomType"/> (typed object), <see cref="ObjectArray"/> (array), <see cref="ObjectDictionary"/> (dictionary),
17+
/// <see cref="RawData"/> (byte array), or <see cref="object"/> (unknown type, usually means the collection is empty).
18+
/// </summary>
19+
[NotNull]
20+
public Type ElementType { get; }
21+
22+
}
23+
}
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using JetBrains.Annotations;
4+
5+
namespace AssetStudio.Extended.MonoBehaviours.Serialization.Serialized {
6+
public sealed class ObjectDictionary {
7+
8+
internal ObjectDictionary([NotNull] Dictionary<object, object> dictionary, [NotNull] Type keyType, [NotNull] Type valueType) {
9+
Dictionary = dictionary;
10+
KeyType = keyType;
11+
ValueType = valueType;
12+
}
13+
14+
[NotNull]
15+
public Dictionary<object, object> Dictionary { get; }
16+
17+
/// <summary>
18+
/// Key type. Can be primitive types (including string), <see cref="CustomType"/> (typed object), <see cref="ObjectArray"/> (array), <see cref="ObjectDictionary"/> (dictionary),
19+
/// <see cref="RawData"/> (byte array), or <see cref="object"/> (unknown type, usually means the collection is empty).
20+
/// </summary>
21+
[NotNull]
22+
public Type KeyType { get; }
23+
24+
/// <summary>
25+
/// Value type. Can be primitive types (including string), <see cref="CustomType"/> (typed object), <see cref="ObjectArray"/> (array), <see cref="ObjectDictionary"/> (dictionary),
26+
/// <see cref="RawData"/> (byte array), or <see cref="object"/> (unknown type, usually means the collection is empty).
27+
/// </summary>
28+
[NotNull]
29+
public Type ValueType { get; }
30+
31+
}
32+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using JetBrains.Annotations;
2+
3+
namespace AssetStudio.Extended.MonoBehaviours.Serialization.Serialized {
4+
public sealed class RawData {
5+
6+
internal RawData([NotNull] byte[] data) {
7+
Data = data;
8+
}
9+
10+
[NotNull]
11+
public byte[] Data { get; }
12+
13+
}
14+
}

src/AssetStudio.Extended.MonoBehaviours/Serialization/Serializers/Static/ConstructorManager.cs renamed to src/AssetStudio.Extended.MonoBehaviours/Serialization/Serializers/Dynamic/ConstructorManager.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
using System.Runtime.CompilerServices;
44
using JetBrains.Annotations;
55

6-
namespace AssetStudio.Extended.MonoBehaviours.Serialization.Serializers.Static {
6+
namespace AssetStudio.Extended.MonoBehaviours.Serialization.Serializers.Dynamic {
77
internal sealed class ConstructorManager {
88

99
public ConstructorManager() {

src/AssetStudio.Extended.MonoBehaviours/Serialization/Serializers/Static/StaticSerializationContext.cs renamed to src/AssetStudio.Extended.MonoBehaviours/Serialization/Serializers/Dynamic/DynamicSerializationContext.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,13 @@
11
using System;
22
using JetBrains.Annotations;
33

4-
namespace AssetStudio.Extended.MonoBehaviours.Serialization.Serializers.Static {
5-
internal sealed class StaticSerializationContext : SerializationContextBase {
4+
namespace AssetStudio.Extended.MonoBehaviours.Serialization.Serializers.Dynamic {
5+
internal sealed class DynamicSerializationContext : SerializationContextBase {
66

7-
public StaticSerializationContext() {
7+
/// <summary>
8+
/// All information are loaded with reflection on demand, thus dynamic.
9+
/// </summary>
10+
public DynamicSerializationContext() {
811
Activator = new ConstructorManager();
912
Converters = new TypeConverterManager(this);
1013
Serializers = new TypedSerializerManager(this);

src/AssetStudio.Extended.MonoBehaviours/Serialization/Serializers/Static/MemberSetter.cs renamed to src/AssetStudio.Extended.MonoBehaviours/Serialization/Serializers/Dynamic/MemberSetter.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
using System.Reflection;
55
using JetBrains.Annotations;
66

7-
namespace AssetStudio.Extended.MonoBehaviours.Serialization.Serializers.Static {
7+
namespace AssetStudio.Extended.MonoBehaviours.Serialization.Serializers.Dynamic {
88
/// <summary>
99
/// Accelerated member setter, faster than <see cref="FieldInfo.SetValue(object, object)"/> and <see cref="PropertyInfo.SetValue(object, object)"/>.
1010
/// However there is compilation cost, so caching should be used.

0 commit comments

Comments
 (0)