Conversation
| var result = config.PrintToString(group); | ||
|
|
||
| result.Should().Contain("Name = LEADER:Leader"); | ||
| result.Should().Contain("Name = LEADER:Alice"); |
There was a problem hiding this comment.
Странный тест. Ты здесь настраиваешь сериализацию лидера g.Leader.Name, при этом тест ожидает, что сериализация настроится не только у лидера, но и простых членов. Тест вводит в заблуждение, работать так не должно
| return new BaseContext<TOwner, T>(this); | ||
| } | ||
|
|
||
| public IPropertyPrinterConfigContext<TOwner, T> For<T>(Expression<Func<TOwner, T>> propertySelector) |
There was a problem hiding this comment.
Нам нужно выполнить настройку конкретного свойства, но у тебя здесь свойство настраивается глобально (см. комментарий к тесту: мы настроили сериализацию Name у лидера, но она встала и для обычных членов - как раз по этой причине). Нужно уметь разделять свойства с одинаковым именем, но разными "путями" - чтобы настройки Name для лидера и для членов не пересекались. Сейчас ты в propertySerializers хранишь просто "Name" - попробуй реализовать хранение c полными путями: "Leader.Name", "Members.Name" - это позволит развести настройки
ObjectPrinting/PrintingConfig.cs
Outdated
| var sb = new StringBuilder(); | ||
| sb.AppendLine(type.Name); | ||
|
|
||
| foreach (var propertyInfo in type.GetProperties()) |
There was a problem hiding this comment.
- Ты смотришь только на
GetProperties, а как жеGetFields? - Используй
BindingFlags.Public | BindingFlags.Instance
ObjectPrinting/PrintingConfig.cs
Outdated
|
|
||
| } | ||
|
|
||
| private string PrintEnumerable(IEnumerable enumerable, Type type, int nestingLevel, HashSet<object> visited) |
There was a problem hiding this comment.
Да, словарь реализует IEnumerable<KeyValuePair<TKey, TValue>>, но мы хотим получить для словарей крассивый аккуратный вывод, например:
Dictionary`2
Key = User1, Value = 10
Key = User2, Value = 5
Давай на это будем ориентироваться, сейчас у тебя словари сериализуются не очень хорошо: большой уровень вложенности и плохая читаемость, нужно поправить
ObjectPrinting/PrintingConfig.cs
Outdated
| { | ||
| return type.Name + " circular dependency" + Environment.NewLine; | ||
| } | ||
| return obj + Environment.NewLine; |
There was a problem hiding this comment.
Небезопасно. Ты сделал защиту от циклических зависимостей для коллекций, а вот обычные типы могут зациклиться на этом моменте: здесь вызывается obj.ToString, который может быть переопределен и будет обращаться к свойствам объекта, что вызовет сериализацию. Я бы просто тут кидал фиксированную заглушку в обоих случаях
…бавил красивую сериализацию словаря, сделал проверку на цикличность безопастной
No description provided.