Beispiel #1
0
        public virtual IEnumerable <FieldInfo> GetFieldsValues()
        {
            var arr = new List <FieldInfo>();

            foreach (var field in GetType().GetFields(BindingFlags.Instance | BindingFlags.Public))
            {
                //Проверка значения
                var value = field.GetValue(this);
                if (value == null)
                {
                    continue;
                }

                //Получение формата бинарных данных
                BinnaryDataType binnaryType = BinnaryDataType.Null;
                var             attrs       = field.GetCustomAttributes(typeof(BinnaryData));
                if (attrs.Any())
                {
                    binnaryType = (attrs.First() as BinnaryData).type;
                }

                var _t        = field.FieldType;
                var fieldName = field.Name;//$"{parent}{field.Name}";

                //Обработка для массива
                if (_t.IsArray)
                {
                    List <string> jsonValues = new List <string>();
                    foreach (var element in (System.Array)value)
                    {
                        jsonValues.Add(element.ToString());
                    }
                    arr.Add(new FieldInfo(fieldName, System.String.Join("|", jsonValues)));
                    continue;
                }

                //Обработка дочернего класса от DataTemplate
                if (_t.IsSubclassOf(templateType))
                {
                    arr.AddRange(((DataTemplate)value).GetFieldsValues()); //($"{fieldName}."));
                    continue;
                }

                //Добавление поля
                arr.Add(new FieldInfo(
                            fieldName,
                            binnaryType,
                            _t.IsEnum ?
                            System.Convert.ToInt32(value).ToString() :
                            value.ToString())
                        );
            }
            return(arr);
        }
Beispiel #2
0
 public BinnaryData(BinnaryDataType type)
 {
     this.type = type;
 }
Beispiel #3
0
 public FieldInfo(string key, BinnaryDataType binnaryType, object value)
 {
     this.key         = key;
     this.binnaryType = binnaryType;
     this.value       = value;
 }