mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-10-02 07:42:25 -05:00
CollectionSerializationBase
This commit is contained in:
@@ -3,7 +3,7 @@ using System.IO;
|
||||
|
||||
namespace UniGLTF
|
||||
{
|
||||
public class ArraySerialization : SerializationBase
|
||||
public class ArraySerialization : CollectionSerializationBase
|
||||
{
|
||||
IValueSerialization m_inner;
|
||||
|
||||
@@ -12,6 +12,7 @@ namespace UniGLTF
|
||||
ValueType = t;
|
||||
m_inner = inner;
|
||||
}
|
||||
|
||||
public override void GenerateDeserializer(StreamWriter writer, string callName)
|
||||
{
|
||||
var itemCallName = callName + "_ITEM";
|
||||
|
||||
@@ -0,0 +1,33 @@
|
||||
using System;
|
||||
using System.IO;
|
||||
|
||||
namespace UniGLTF
|
||||
{
|
||||
public abstract class CollectionSerializationBase : IValueSerialization
|
||||
{
|
||||
public Type ValueType
|
||||
{
|
||||
get;
|
||||
protected set;
|
||||
}
|
||||
|
||||
public bool IsInline
|
||||
{
|
||||
get { return false; }
|
||||
}
|
||||
|
||||
public abstract void GenerateDeserializer(StreamWriter writer, string callName);
|
||||
|
||||
public string GenerateDeserializerCall(string callName, string argName)
|
||||
{
|
||||
return $"{callName}({argName})";
|
||||
}
|
||||
|
||||
public abstract void GenerateSerializer(StreamWriter writer, string callName);
|
||||
|
||||
public string GenerateSerializerCall(string callName, string argName)
|
||||
{
|
||||
return $"{callName}(f, {argName})";
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,11 @@
|
||||
fileFormatVersion: 2
|
||||
guid: 52a81be56b0149144aa0836e59d9bc3b
|
||||
MonoImporter:
|
||||
externalObjects: {}
|
||||
serializedVersion: 2
|
||||
defaultReferences: []
|
||||
executionOrder: 0
|
||||
icon: {instanceID: 0}
|
||||
userData:
|
||||
assetBundleName:
|
||||
assetBundleVariant:
|
||||
@@ -3,7 +3,7 @@ using System.IO;
|
||||
|
||||
namespace UniGLTF
|
||||
{
|
||||
public class EnumIntSerialization : IValueSerialization
|
||||
public class EnumSerialization : IValueSerialization
|
||||
{
|
||||
Type m_type;
|
||||
EnumSerializationType m_serializationType;
|
||||
@@ -24,7 +24,7 @@ namespace UniGLTF
|
||||
}
|
||||
|
||||
|
||||
public EnumIntSerialization(Type t, EnumSerializationType serializationType)
|
||||
public EnumSerialization(Type t, EnumSerializationType serializationType)
|
||||
{
|
||||
m_type = t;
|
||||
m_serializationType = serializationType;
|
||||
|
||||
@@ -127,7 +127,7 @@ namespace UniGLTF
|
||||
}
|
||||
else if (t.IsEnum)
|
||||
{
|
||||
return new EnumIntSerialization(t, attr.EnumSerializationType);
|
||||
return new EnumSerialization(t, attr.EnumSerializationType);
|
||||
}
|
||||
else if (t == typeof(glTFExtension))
|
||||
{
|
||||
@@ -164,5 +164,20 @@ namespace UniGLTF
|
||||
|
||||
return sb.ToString();
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Runtimeのシリアライズ判定関数を作る
|
||||
/// </summary>
|
||||
/// <param name="t"></param>
|
||||
/// <returns></returns>
|
||||
public string CreateSerializationCondition(Type t, string arg)
|
||||
{
|
||||
if (t.IsClass)
|
||||
{
|
||||
return $"{arg}!=null";
|
||||
}
|
||||
|
||||
return "true";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -3,7 +3,7 @@ using System.IO;
|
||||
|
||||
namespace UniGLTF
|
||||
{
|
||||
public class ListSerialization : SerializationBase
|
||||
public class ListSerialization : CollectionSerializationBase
|
||||
{
|
||||
IValueSerialization m_inner;
|
||||
|
||||
|
||||
@@ -5,35 +5,7 @@ using System.Text;
|
||||
|
||||
namespace UniGLTF
|
||||
{
|
||||
public abstract class SerializationBase : IValueSerialization
|
||||
{
|
||||
public Type ValueType
|
||||
{
|
||||
get;
|
||||
protected set;
|
||||
}
|
||||
|
||||
public bool IsInline
|
||||
{
|
||||
get { return false; }
|
||||
}
|
||||
|
||||
public abstract void GenerateDeserializer(StreamWriter writer, string callName);
|
||||
|
||||
public string GenerateDeserializerCall(string callName, string argName)
|
||||
{
|
||||
return $"{callName}({argName})";
|
||||
}
|
||||
|
||||
public abstract void GenerateSerializer(StreamWriter writer, string callName);
|
||||
|
||||
public string GenerateSerializerCall(string callName, string argName)
|
||||
{
|
||||
return $"{callName}(f, {argName})";
|
||||
}
|
||||
}
|
||||
|
||||
public class ObjectSerialization : SerializationBase
|
||||
public class ObjectSerialization : CollectionSerializationBase
|
||||
{
|
||||
string m_path;
|
||||
FieldSerializationInfo[] m_fsi;
|
||||
@@ -111,6 +83,16 @@ public static $0 $2(ListTreeNode<JsonValue> parsed)
|
||||
}
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// シリアライザーのコード生成
|
||||
///
|
||||
/// ObjectのFieldのみ値によって、出力するか否かの判定が必用。
|
||||
///
|
||||
/// 例: 空文字列は出力しない
|
||||
///
|
||||
/// </summary>
|
||||
/// <param name="writer"></param>
|
||||
/// <param name="callName"></param>
|
||||
public override void GenerateSerializer(StreamWriter writer, string callName)
|
||||
{
|
||||
writer.Write($@"
|
||||
@@ -123,9 +105,13 @@ public static void {callName}(JsonFormatter f, {ValueType.Name} value)
|
||||
|
||||
foreach (var f in m_fsi)
|
||||
{
|
||||
writer.Write($" f.Key(\"{f.Name}\");\n");
|
||||
writer.Write($" {f.Serialization.GenerateSerializerCall(f.FunctionName, $"value.{f.Name}")};\n");
|
||||
writer.Write("\n");
|
||||
var valueName = $"value.{f.Name}";
|
||||
writer.Write($@"
|
||||
if({f.CreateSerializationCondition(f.Serialization.ValueType, valueName)}){{
|
||||
f.Key(""{f.Name}"");
|
||||
{f.Serialization.GenerateSerializerCall(f.FunctionName, valueName)};
|
||||
}}
|
||||
");
|
||||
}
|
||||
|
||||
writer.Write(@"
|
||||
|
||||
@@ -3,7 +3,7 @@ using System.IO;
|
||||
|
||||
namespace UniGLTF
|
||||
{
|
||||
public class StringKeyDictionarySerialization : SerializationBase
|
||||
public class StringKeyDictionarySerialization : CollectionSerializationBase
|
||||
{
|
||||
IValueSerialization m_inner;
|
||||
|
||||
@@ -12,6 +12,7 @@ namespace UniGLTF
|
||||
ValueType = t;
|
||||
m_inner = inner;
|
||||
}
|
||||
|
||||
public override void GenerateDeserializer(StreamWriter writer, string callName)
|
||||
{
|
||||
var itemCallName = callName + "_ITEM";
|
||||
|
||||
@@ -19,13 +19,13 @@ namespace UniGLTF
|
||||
public static string ToJson(this glTFMesh self)
|
||||
{
|
||||
var f = new JsonFormatter();
|
||||
GltfSerializer.Serialize_gltf_meshes_LIST(f, self);
|
||||
GltfSerializer.Serialize_gltf_meshes_ITEM(f, self);
|
||||
return f.ToString();
|
||||
}
|
||||
public static string ToJson(this glTFPrimitives self)
|
||||
{
|
||||
var f = new JsonFormatter();
|
||||
GltfSerializer.Serialize_gltf_meshes__primitives_LIST(f, self);
|
||||
GltfSerializer.Serialize_gltf_meshes__primitives_ITEM(f, self);
|
||||
return f.ToString();
|
||||
}
|
||||
public static string ToJson(this glTFAttributes self)
|
||||
@@ -43,19 +43,19 @@ namespace UniGLTF
|
||||
public static string ToJson(this glTFMaterial self)
|
||||
{
|
||||
var f = new JsonFormatter();
|
||||
GltfSerializer.Serialize_gltf_materials_LIST(f, self);
|
||||
GltfSerializer.Serialize_gltf_materials_ITEM(f, self);
|
||||
return f.ToString();
|
||||
}
|
||||
public static string ToJson(this glTFNode self)
|
||||
{
|
||||
var f = new JsonFormatter();
|
||||
GltfSerializer.Serialize_gltf_nodes_LIST(f, self);
|
||||
GltfSerializer.Serialize_gltf_nodes_ITEM(f, self);
|
||||
return f.ToString();
|
||||
}
|
||||
public static string ToJson(this glTFSkin self)
|
||||
{
|
||||
var f = new JsonFormatter();
|
||||
GltfSerializer.Serialize_gltf_skins_LIST(f, self);
|
||||
GltfSerializer.Serialize_gltf_skins_ITEM(f, self);
|
||||
return f.ToString();
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -18,13 +18,13 @@ namespace VRM
|
||||
public static string ToJson(this glTFMesh self)
|
||||
{
|
||||
var f = new JsonFormatter();
|
||||
GltfSerializer.Serialize_gltf_meshes_LIST(f, self);
|
||||
GltfSerializer.Serialize_gltf_meshes_ITEM(f, self);
|
||||
return f.ToString();
|
||||
}
|
||||
public static string ToJson(this glTFPrimitives self)
|
||||
{
|
||||
var f = new JsonFormatter();
|
||||
GltfSerializer.Serialize_gltf_meshes__primitives_LIST(f, self);
|
||||
GltfSerializer.Serialize_gltf_meshes__primitives_ITEM(f, self);
|
||||
return f.ToString();
|
||||
}
|
||||
public static string ToJson(this glTFAttributes self)
|
||||
@@ -42,19 +42,19 @@ namespace VRM
|
||||
public static string ToJson(this glTFMaterial self)
|
||||
{
|
||||
var f = new JsonFormatter();
|
||||
GltfSerializer.Serialize_gltf_materials_LIST(f, self);
|
||||
GltfSerializer.Serialize_gltf_materials_ITEM(f, self);
|
||||
return f.ToString();
|
||||
}
|
||||
public static string ToJson(this glTFNode self)
|
||||
{
|
||||
var f = new JsonFormatter();
|
||||
GltfSerializer.Serialize_gltf_nodes_LIST(f, self);
|
||||
GltfSerializer.Serialize_gltf_nodes_ITEM(f, self);
|
||||
return f.ToString();
|
||||
}
|
||||
public static string ToJson(this glTFSkin self)
|
||||
{
|
||||
var f = new JsonFormatter();
|
||||
GltfSerializer.Serialize_gltf_skins_LIST(f, self);
|
||||
GltfSerializer.Serialize_gltf_skins_ITEM(f, self);
|
||||
return f.ToString();
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user