/// <summary> /// Сериализует активные свойства. /// </summary> /// <returns>Пары (имя свойства, сериализованное значение).</returns> public IEnumerable <KeyValuePair <string, string> > SerializeProperties() { // ReSharper disable LoopCanBeConvertedToQuery foreach (PropertyInfo property in GlyphsHelper.GetActiveProperties(this)) { yield return(new KeyValuePair <string, string>( property.Name, Core.Instance.Serializers.Serialize(property.PropertyType, property.GetValue(this, null)))); } // ReSharper restore LoopCanBeConvertedToQuery }
/// <summary> /// Десериализует активные свойства. /// </summary> /// <param name="pairs">Пары (имя свойства, сериализованное значение).</param> /// <returns>Свойства, которых не удалось задать (нет в глифе).</returns> public IEnumerable <string> DeserializeProperties(IEnumerable <KeyValuePair <string, string> > pairs) { // Активные свойства глифа. var activeProperties = new List <PropertyInfo>(GlyphsHelper.GetActiveProperties(this)); // Проходим по заданным парам... foreach (KeyValuePair <string, string> kvp in pairs) { // Найдено ли свойство, чтобы задать ему значение. bool finded = false; // Проходим по активным свойствам глифа... foreach (PropertyInfo property in activeProperties) { // Если нашли нужное свойство, задаём ему значение. if (property.Name == kvp.Key) { property.SetValue( this, Core.Instance.Serializers.Deserialize(property.PropertyType, kvp.Value), null); // Свойство найдено, значит... finded = true; // ...больше его искать не нужно. break; } } // Если свойство в глифе не найдено, вернём его имя. if (!finded) { yield return(kvp.Key); } } }