示例#1
0
        //public static IEnumerable<T> DeserializeFromColumnsAndDataJson<T>(JSONObject json)
        //where T : DataEntry
        //{
        //	DataEntry.< DeserializeFromColumnsAndDataJson > c__Iterator0 < T > variable = null;
        //	return variable;
        //}

        public static void DeserializeFromColumnsAndDataJsonAsync <T>(JsonTextReader reader, Action <T> objectCallback, Action onFinish)
            where T : DataEntry
        {
            if (reader == null)
            {
                throw new ArgumentNullException("reader");
            }
            if (objectCallback == null)
            {
                throw new ArgumentNullException("objectCallback");
            }
            if (!reader.Read())
            {
                throw new JsonException("JSON is finished unexpectedly");
            }
            if (reader.TokenType != JsonToken.StartObject)
            {
                throw new JsonException(string.Format("Couldn't find {0} token", JsonToken.StartObject));
            }
            DataEntry.DataEntryColumn[] synchronizableColumns = DataEntry.GetSynchronizableColumns <T>();
            if (!reader.Read())
            {
                throw new JsonException("JSON is finished unexpectedly");
            }
            if (reader.TokenType == JsonToken.PropertyName)
            {
                if ((reader.Value as string ?? string.Empty).ToUpperInvariant() == "COLUMNS")
                {
                    if (!reader.Read())
                    {
                        throw new JsonException("JSON is finished unexpectedly");
                    }
                    string[] strArrays = DataEntry.ParseStringsArray(reader);
                    DataEntry.DataEntryColumn dataEntryColumn = synchronizableColumns.FirstOrDefault <DataEntry.DataEntryColumn>((DataEntry.DataEntryColumn c) => (c.SynchronizableAttribute == null || c.DataColumnAttribute == null ? false : c.DataColumnAttribute.IsPrimaryKey));
                    Dictionary <int, int>     nums            = new Dictionary <int, int>();
                    int num = -1;
                    for (int i = 0; i < (int)strArrays.Length; i++)
                    {
                        int num1 = 0;
                        while (num1 < (int)synchronizableColumns.Length)
                        {
                            if (string.Equals(strArrays[i], synchronizableColumns[num1].SynchronizableName, StringComparison.InvariantCultureIgnoreCase))
                            {
                                if (synchronizableColumns[num1].DataColumnAttribute != null && synchronizableColumns[num1].DataColumnAttribute.IsPrimaryKey)
                                {
                                    num = i;
                                }
                                nums.Add(i, num1);
                                break;
                            }
                            else
                            {
                                num1++;
                            }
                        }
                    }
                    //bool flag = (num != -1 ? false : ReflectionUtilities.IsPrimaryKeyAutoincrement<T>());
                    bool flag = true;
                    if (dataEntryColumn == null && !flag)
                    {
                        throw new InvalidOperationException(string.Format("Couldn't find a synchronizable primary key for type {0}", typeof(T).Name));
                    }
                    if (num == -1 && !flag)
                    {
                        throw new InvalidOperationException(string.Format("Couldn't find a primary key field in JSON for type {0}", typeof(T).Name));
                    }
                    if (!reader.Read())
                    {
                        throw new JsonException("JSON is finished unexpectedly");
                    }
                    if (reader.TokenType == JsonToken.PropertyName)
                    {
                        if ((reader.Value as string ?? string.Empty).ToUpperInvariant() == "DATA")
                        {
                            if (!reader.Read())
                            {
                                throw new JsonException("JSON is finished unexpectedly");
                            }
                            if (reader.TokenType != JsonToken.StartArray)
                            {
                                throw new JsonException(string.Format("Token {0} expected", JsonToken.StartArray));
                            }
                            if (!reader.Read())
                            {
                                throw new JsonException("JSON is finished unexpectedly");
                            }
                            while (reader.TokenType != JsonToken.EndArray)
                            {
                                string[] strArrays1 = DataEntry.ParseStringsArray(reader);
                                int      num2       = (!flag ? strArrays1[num].ParseInt() : DataEntry.GetAvailableId <T>());
                                T        instance   = DataEntry.GetInstance <T>(num2);
                                for (int j = 0; j < (int)strArrays.Length; j++)
                                {
                                    if (j != num && nums.ContainsKey(j))
                                    {
                                        if (synchronizableColumns[nums[j]].SynchronizableAttribute.Pull)
                                        {
                                            try
                                            {
                                                synchronizableColumns[nums[j]].SetValue(instance, strArrays1[j]);
                                            }
                                            catch (FormatException formatException1)
                                            {
                                                FormatException formatException = formatException1;
                                                throw new SynchronizationException(string.Format("Failed to fill synchronizable property '{0}' with value '{1}' for {2} with ID {3}. Exception: {4}", new object[] { strArrays[j], strArrays1[j], typeof(T).Name, num2, formatException }));
                                            }
                                        }
                                    }
                                }
                                objectCallback(instance);
                                if (reader.Read())
                                {
                                    continue;
                                }
                                throw new JsonException("JSON is finished unexpectedly");
                            }
                            if (onFinish != null)
                            {
                                onFinish();
                            }
                            return;
                        }
                    }
                    throw new JsonException(string.Format("Token {0} not found", "DATA"));
                }
            }
            throw new JsonException(string.Format("Token {0} not found", "COLUMNS"));
        }
示例#2
0
 public string GetValue(DataEntry entry)
 {
     return(entry.GetValue <DataEntry>(this.PropertyInfo));
 }
示例#3
0
 public void SetValue(DataEntry entry, string value)
 {
     entry.SetValue <DataEntry>(this.PropertyInfo, value);
 }
示例#4
0
 private void AddArrayToJsonAsField(JSONObject json, DataEntry entry)
 {
     json.AddField(this.SynchronizableName, this.GetJsonOfArray(entry));
 }
示例#5
0
 private void AddArrayToJson(JSONObject json, DataEntry entry)
 {
     json.Add(this.GetJsonOfArray(entry));
 }
示例#6
0
 public static JSONObject SerializeToColumnsAndDataJson <T>(T entry)
     where T : DataEntry
 {
     return(DataEntry.SerializeToColumnsAndDataJson <T>(new T[] { entry }));
 }
示例#7
0
 public static bool InstanceExists <T>(int id)
     where T : DataEntry
 {
     return(DataEntry.InstanceExists(typeof(T), id));
 }
示例#8
0
 public static T GetInstance <T>(int id)
     where T : DataEntry
 {
     return((T)DataEntry.GetInstance(typeof(T), id));
 }