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); }
public BinnaryData(BinnaryDataType type) { this.type = type; }
public FieldInfo(string key, BinnaryDataType binnaryType, object value) { this.key = key; this.binnaryType = binnaryType; this.value = value; }