mirror of
https://github.com/vrm-c/UniVRM.git
synced 2026-05-13 14:04:29 -05:00
115 lines
3.0 KiB
C#
115 lines
3.0 KiB
C#
using System;
|
|
using System.IO;
|
|
|
|
namespace UniGLTF
|
|
{
|
|
public class ArraySerialization : FunctionSerializationBase
|
|
{
|
|
IValueSerialization m_inner;
|
|
|
|
public ArraySerialization(Type t, IValueSerialization inner)
|
|
{
|
|
ValueType = t;
|
|
m_inner = inner;
|
|
}
|
|
public override void GenerateDeserializer(StreamWriter writer, string callName)
|
|
{
|
|
var itemCallName = callName + "_ARRAY";
|
|
|
|
writer.Write(@"
|
|
public static $0 $2(ListTreeNode<JsonValue> parsed)
|
|
{
|
|
var value = new $1[parsed.GetArrayCount()];
|
|
int i=0;
|
|
foreach(var x in parsed.ArrayItems())
|
|
{
|
|
value[i++] = $3;
|
|
}
|
|
return value;
|
|
}
|
|
"
|
|
.Replace("$0", UniJSON.JsonSchemaAttribute.GetTypeName(ValueType))
|
|
.Replace("$1", m_inner.ValueType.Name)
|
|
.Replace("$2", callName)
|
|
.Replace("$3", m_inner.GenerateDeserializerCall(itemCallName, "x"))
|
|
);
|
|
|
|
if (!m_inner.IsInline)
|
|
{
|
|
m_inner.GenerateDeserializer(writer, itemCallName);
|
|
}
|
|
}
|
|
}
|
|
|
|
public class ListSerialization : FunctionSerializationBase
|
|
{
|
|
IValueSerialization m_inner;
|
|
|
|
public ListSerialization(Type t, IValueSerialization inner)
|
|
{
|
|
ValueType = t;
|
|
m_inner = inner;
|
|
}
|
|
public override void GenerateDeserializer(StreamWriter writer, string callName)
|
|
{
|
|
var itemCallName = callName + "_LIST";
|
|
writer.Write(@"
|
|
public static $0 $2(ListTreeNode<JsonValue> parsed)
|
|
{
|
|
var value = new List<$1>();
|
|
foreach(var x in parsed.ArrayItems())
|
|
{
|
|
value.Add($3);
|
|
}
|
|
return value;
|
|
}"
|
|
.Replace("$0", UniJSON.JsonSchemaAttribute.GetTypeName(ValueType))
|
|
.Replace("$1", m_inner.ValueType.Name)
|
|
.Replace("$2", callName)
|
|
.Replace("$3", m_inner.GenerateDeserializerCall(itemCallName, "x"))
|
|
);
|
|
|
|
if (!m_inner.IsInline)
|
|
{
|
|
m_inner.GenerateDeserializer(writer, itemCallName);
|
|
}
|
|
}
|
|
}
|
|
|
|
public class StringKeyDictionarySerialization : FunctionSerializationBase
|
|
{
|
|
IValueSerialization m_inner;
|
|
|
|
public StringKeyDictionarySerialization(Type t, IValueSerialization inner)
|
|
{
|
|
ValueType = t;
|
|
m_inner = inner;
|
|
}
|
|
public override void GenerateDeserializer(StreamWriter writer, string callName)
|
|
{
|
|
var itemCallName = callName + "_DICT";
|
|
writer.Write(@"
|
|
|
|
public static $0 $2(ListTreeNode<JsonValue> parsed)
|
|
{
|
|
var value = new Dictionary<string, $1>();
|
|
foreach(var kv in parsed.ObjectItems())
|
|
{
|
|
value.Add(kv.Key.GetString(), $3);
|
|
}
|
|
return value;
|
|
}
|
|
"
|
|
.Replace("$0", UniJSON.JsonSchemaAttribute.GetTypeName(ValueType))
|
|
.Replace("$1", m_inner.ValueType.Name)
|
|
.Replace("$2", callName)
|
|
.Replace("$3", m_inner.GenerateDeserializerCall(itemCallName, "kv.Value"))
|
|
);
|
|
|
|
if (!m_inner.IsInline)
|
|
{
|
|
m_inner.GenerateDeserializer(writer, itemCallName);
|
|
}
|
|
}
|
|
}
|
|
} |