This commit is contained in:
ousttrue
2019-02-28 16:24:00 +09:00
parent 18d0913af9
commit 8c5558d9a6
11 changed files with 2360 additions and 16 deletions

View File

@@ -29,6 +29,15 @@ namespace UniJSON
f.Value(new ArraySegment<Byte>(bytes));
}
public static void Value(this IFormatter f, UnityEngine.Vector2 v)
{
//CommaCheck();
f.BeginMap(2);
f.Key("x"); f.Value(v.x);
f.Key("y"); f.Value(v.y);
f.EndMap();
}
public static void Value(this IFormatter f, UnityEngine.Vector3 v)
{
//CommaCheck();
@@ -39,6 +48,17 @@ namespace UniJSON
f.EndMap();
}
public static void Value(this IFormatter f, UnityEngine.Vector4 v)
{
//CommaCheck();
f.BeginMap(4);
f.Key("x"); f.Value(v.x);
f.Key("y"); f.Value(v.y);
f.Key("z"); f.Value(v.z);
f.Key("w"); f.Value(v.w);
f.EndMap();
}
static MethodInfo GetMethod<T>(Expression<Func<T>> expression)
{
var method = typeof(FormatterExtensions).GetMethod("Serialize");

View File

@@ -78,8 +78,10 @@ namespace UniJSON
{
delegate void Serializer(IFormatter f, T t);
static Action<IFormatter, T> GetSerializer(Type t)
static Action<IFormatter, T> GetSerializer()
{
var t = typeof(T);
// object
if (typeof(T) == typeof(object) && t.GetType() != typeof(object))
{
@@ -166,7 +168,7 @@ namespace UniJSON
{
if (s_serializer == null)
{
s_serializer = new Serializer(GetSerializer(typeof(T)));
s_serializer = new Serializer(GetSerializer());
}
s_serializer(f, t);
}

View File

@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
@@ -9,7 +9,7 @@ namespace UniJSON
public static class GenericDeserializer<T, U>
where T : IListTreeItem, IValue<T>
{
static V[] GenericArrayDeserializer<V>(ListTreeNode<T> s)
public static V[] GenericArrayDeserializer<V>(ListTreeNode<T> s)
{
if (!s.IsArray())
{
@@ -24,7 +24,7 @@ namespace UniJSON
return u;
}
static List<V> GenericListDeserializer<V>(ListTreeNode<T> s)
public static List<V> GenericListDeserializer<V>(ListTreeNode<T> s)
{
if (!s.IsArray())
{
@@ -40,7 +40,7 @@ namespace UniJSON
return u;
}
static object DefaultDictionaryDeserializer(ListTreeNode<T> s)
public static object DefaultDictionaryDeserializer(ListTreeNode<T> s)
{
switch (s.Value.ValueType)
{
@@ -82,7 +82,7 @@ namespace UniJSON
/// <typeparam name="V"></typeparam>
/// <param name="s"></param>
/// <returns></returns>
static Dictionary<string, V> DictionaryDeserializer<V>(ListTreeNode<T> s)
public static Dictionary<string, V> DictionaryDeserializer<V>(ListTreeNode<T> s)
{
var d = new Dictionary<string, V>();
foreach (var kv in s.ObjectItems())
@@ -146,7 +146,7 @@ namespace UniJSON
if (target.IsArray)
{
var mi = typeof(GenericDeserializer<T, U>).GetMethod("GenericArrayDeserializer",
BindingFlags.Static | BindingFlags.NonPublic);
BindingFlags.Static | BindingFlags.Public);
var g = mi.MakeGenericMethod(target.GetElementType());
return GenericInvokeCallFactory.StaticFunc<ListTreeNode<T>, U>(g);
}
@@ -156,7 +156,7 @@ namespace UniJSON
if (target.GetGenericTypeDefinition() == typeof(List<>))
{
var mi = typeof(GenericDeserializer<T, U>).GetMethod("GenericListDeserializer",
BindingFlags.Static | BindingFlags.NonPublic);
BindingFlags.Static | BindingFlags.Public);
var g = mi.MakeGenericMethod(target.GetGenericArguments());
return GenericInvokeCallFactory.StaticFunc<ListTreeNode<T>, U>(g);
}
@@ -165,7 +165,7 @@ namespace UniJSON
{
var mi = typeof(GenericDeserializer<T, U>).GetMethod("DefaultDictionaryDeserializer",
BindingFlags.Static | BindingFlags.NonPublic);
BindingFlags.Static | BindingFlags.Public);
return GenericInvokeCallFactory.StaticFunc<ListTreeNode<T>, U>(mi);
}
else
@@ -173,7 +173,7 @@ namespace UniJSON
target.GetGenericArguments()[0] == typeof(string))
{
var mi = typeof(GenericDeserializer<T, U>).GetMethod("DictionaryDeserializer",
BindingFlags.Static | BindingFlags.NonPublic);
BindingFlags.Static | BindingFlags.Public);
var g = mi.MakeGenericMethod(target.GetGenericArguments()[1]);
return GenericInvokeCallFactory.StaticFunc<ListTreeNode<T>, U>(g);
}

View File

@@ -286,5 +286,22 @@ namespace UniJSON
{
return new JsonDictionaryValidator<T>();
}
#region AOT
public static JsonDictionaryValidator<Single> CreateSingle()
{
return Create<Single>();
}
public static JsonDictionaryValidator<Int32> CreateInt32()
{
return Create<Int32>();
}
public static JsonDictionaryValidator<Boolean> CreateBoolean()
{
return Create<Boolean>();
}
#endregion
}
}

View File

@@ -1,4 +1,4 @@
using System;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
@@ -592,7 +592,7 @@ namespace UniJSON
GenericSerializer<T>.Serialize(this, f, c, value);
}
static class GenericDeserializer<S, T>
public static class GenericDeserializer<S, T>
where S : IListTreeItem, IValue<S>
{
delegate T Deserializer(ListTreeNode<S> src);
@@ -610,7 +610,7 @@ namespace UniJSON
};
}
static U DeserializeField<U>(JsonSchema prop, ListTreeNode<S> s)
public static U DeserializeField<U>(JsonSchema prop, ListTreeNode<S> s)
{
var u = default(U);
prop.Validator.Deserialize(s, ref u);
@@ -639,7 +639,7 @@ namespace UniJSON
}
var mi = typeof(GenericDeserializer<S, T>).GetMethod("DeserializeField",
BindingFlags.Static | BindingFlags.NonPublic);
BindingFlags.Static | BindingFlags.Public);
var g = mi.MakeGenericMethod(x.FieldType);
return (FieldSetter)((s, o) =>