private static void AssignField(string key, StringBuilder raw, object o, SerializationData data) { FieldInfo f = data.GetField(o.GetType(), key); if (f == null) { return; } if (raw.Length == 4 && raw[0] == 'N' && raw[1] == 'U' && raw[2] == 'L' && raw[3] == 'L') { f.SetValue(o, null); return; } if (raw[0] == '(') { int n = raw.IndexOf(")"); data.latestType = data.registeredTypes[int.Parse(raw.ToString(1, n - 1))]; raw = raw.Remove(0, n + 1); } if (f.FieldType.IsAssignableFrom(data.latestType) == false) { if (UON.VerboseLevel > 1) { Debug.Log("Type \"" + data.latestType.Name + "\" can not be assigned on \"" + f + "\"." + raw); } return; } for (int i = 0; i < UON.types.Length; i++) { if (UON.types[i].Can(data.latestType) == true) { try { f.SetValue(o, UON.types[i].Deserialize(data, raw, null)); } catch (Exception ex) { if (UON.VerboseLevel > 1) { Debug.LogError(ex.GetType().Name + ": " + f + " from " + f.DeclaringType.Name + "with \"" + raw + "\" failed." + Environment.NewLine + ex.Message + Environment.NewLine + ex.StackTrace); } } break; } } }