public static Type FromString(string serializedTypeString) { if (string.IsNullOrEmpty(serializedTypeString) || SerializedType.IsGeneric(serializedTypeString)) { return(null); } return(Type.GetType(SerializedType.SplitTypeString(serializedTypeString).typeName, true)); }
private static SerializedType.SerializedTypeData SplitTypeString(string serializedTypeString) { if (string.IsNullOrEmpty(serializedTypeString)) { throw new ArgumentException("Cannot parse serialized type string, it is empty."); } SerializedType.SerializedTypeData result; result.isGeneric = SerializedType.IsGeneric(serializedTypeString); result.typeName = serializedTypeString.Substring(0, serializedTypeString.IndexOf('#')); result.genericTypeName = serializedTypeString.Substring(result.typeName.Length + 1, serializedTypeString.IndexOf('#', result.typeName.Length + 1) - result.typeName.Length - 1); return(result); }
public static string SetGenericArgumentType(string serializedTypeString, Type type) { if (SerializedType.IsGeneric(serializedTypeString)) { SerializedType.SerializedTypeData data = SerializedType.SplitTypeString(serializedTypeString); data.genericTypeName = data.typeName; data.isGeneric = false; string typeName = data.typeName; if (typeName != null) { if (SerializedType.< > f__switch$map1 == null) { SerializedType.< > f__switch$map1 = new Dictionary <string, int>(2) { { "T", 0 }, { "T[]", 1 } }; } int num; if (SerializedType.< > f__switch$map1.TryGetValue(typeName, out num)) { if (num == 0) { data.typeName = SerializedType.ToShortTypeName(type); goto IL_105; } if (num == 1) { data.typeName = SerializedType.ToShortTypeName(type.MakeArrayType()); goto IL_105; } } } data.typeName = SerializedType.ToShortTypeName(Type.GetType(data.typeName, true).GetGenericTypeDefinition().MakeGenericType(new Type[] { type })); IL_105: return(SerializedType.ToString(data)); } if (SerializedType.IsBaseTypeGeneric(serializedTypeString)) { throw new ArgumentException("Trying to set a different generic type. Reset old one first."); } throw new ArgumentException("Trying to set generic argument type for non generic type."); }