コード例 #1
0
        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;
                }
            }
        }