public void Extensiblity() { Formatter.AppendFormatterResolver(t => { if (t == typeof(CannotSerialize)) { return(new CannotSerializeFormatter()); } return(null); }); Formatter.AppendFormatterResolver(t => { if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(KeyValuePair <,>)) { return(Activator.CreateInstance(typeof(KeyValuePairFormatter <,>).MakeGenericType(t.GenericTypeArguments))); } return(null); }); Formatter.AppendFormatterResolver(t => { if (t == typeof(Uri)) { return(new UriFormatter()); } return(null); }); var a = ZeroFormatterSerializer.Convert(new CannotSerialize(99, "aaa")); a.MyProperty1.Is(99); a.MyProperty2.Is("aaa"); var b = ZeroFormatterSerializer.Convert(new KeyValuePair <string, int>("hoge", 1000)); b.Key.Is("hoge"); b.Value.Is(1000); var c = ZeroFormatterSerializer.Convert(new Uri("http://google.co.jp/")); c.ToString().Is("http://google.co.jp/"); }
public static void ManualRegister() { if (manualregistered) { return; } manualregistered = true; Formatter.AppendFormatterResolver(t => { /*if (t.IsSubclassOf(typeof(global::RandomEnchant.Status))||t==typeof(Status)) * { * //Type first = typeof(global::RandomEnchant.StatusModifierFormatter<,>).GetGenericArguments().First();//.MakeGenericType(t.GetGenericArguments().StartsWith()); * var formatter=typeof(global::RandomEnchant.StatusFormatter<,>).MakeGenericType(typeof(Formatters.DefaultResolver),t); * //Debug.Log(formatter.ToString()); * return Activator.CreateInstance(formatter); * } * else if(t==typeof(IStatus)) * { * var formatter=typeof(global::RandomEnchant.IStatusFormatter<>).MakeGenericType(typeof(Formatters.DefaultResolver)); * * return Activator.CreateInstance(formatter); * } * else if(t==typeof(IList<IStatus>)) * { * var formatter=typeof(global::RandomEnchant.IStatusFormatter<>).MakeGenericType(typeof(Formatters.DefaultResolver)); * * return Activator.CreateInstance(formatter); * } * else if (t.IsSubclassOf(typeof(global::RandomEnchant.StatusHolder))||t==typeof(StatusHolder)) * { * //Type first = typeof(global::RandomEnchant.StatusModifierFormatter<,>).GetGenericArguments().First();//.MakeGenericType(t.GetGenericArguments().StartsWith()); * var formatter=typeof(global::RandomEnchant.StatusHolderFormatter<,>).MakeGenericType(typeof(Formatters.DefaultResolver),t); * //Debug.Log(formatter.ToString()); * return Activator.CreateInstance(formatter); * } * else if(t==typeof(IStatusHolder)) * { * var formatter=typeof(global::RandomEnchant.IStatusHolderFormatter<>).MakeGenericType(typeof(Formatters.DefaultResolver)); * * return Activator.CreateInstance(formatter); * } * else if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(global::RandomEnchant.StatusModifier<>)) * { * //Type first = typeof(global::RandomEnchant.StatusModifierFormatter<,>).GetGenericArguments().First();//.MakeGenericType(t.GetGenericArguments().StartsWith()); * //Debug.Log(first); * var formatter=typeof(global::RandomEnchant.StatusModifierFormatter<,>).MakeGenericType(t.GetGenericArguments().StartsWith(typeof(Formatters.DefaultResolver))); * //Debug.Log(formatter.ToString()); * return Activator.CreateInstance(formatter); * } * else if(t==typeof(IStatusModifier<IStatus>)) * { * var formatter=typeof(global::RandomEnchant.IListFormatter<,>).MakeGenericType(t.GetGenericArguments().StartsWith(typeof(Formatters.DefaultResolver))); * * return Activator.CreateInstance(formatter); * } * * else if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(global::RandomEnchant.Suffix<>)) * { * //Type first = typeof(global::RandomEnchant.StatusModifierFormatter<,>).GetGenericArguments().First();//.MakeGenericType(t.GetGenericArguments().StartsWith()); * //Debug.Log(first); * var formatter=typeof(global::RandomEnchant.SuffixFormatter<,>).MakeGenericType(t.GetGenericArguments().StartsWith(typeof(Formatters.DefaultResolver))); * //Debug.Log(formatter.ToString()); * return Activator.CreateInstance(formatter); * } * else if(t==typeof(ISuffix<IStatus>)) * { * var formatter=typeof(global::RandomEnchant.ISuffixFormatter<>).MakeGenericType(typeof(Formatters.DefaultResolver)); * * return Activator.CreateInstance(formatter); * } * else if (t.IsGenericType && t.GetGenericTypeDefinition() == typeof(global::RandomEnchant.Prefix<>)) * { * //Type first = typeof(global::RandomEnchant.StatusModifierFormatter<,>).GetGenericArguments().First();//.MakeGenericType(t.GetGenericArguments().StartsWith()); * //Debug.Log(first); * var formatter=typeof(global::RandomEnchant.PrefixFormatter<,>).MakeGenericType(t.GetGenericArguments().StartsWith(typeof(Formatters.DefaultResolver))); * //Debug.Log(formatter.ToString()); * return Activator.CreateInstance(formatter); * } * else if(t==typeof(IPrefix<IStatus>)) * { * var formatter=typeof(global::RandomEnchant.IPrefixFormatter<>).MakeGenericType(typeof(Formatters.DefaultResolver)); * * return Activator.CreateInstance(formatter); * }*/ return(null); // fallback to the next resolver }); }