- Timestamp:
- 03/03/17 11:41:43 (7 years ago)
- Location:
- branches/PersistenceOverhaul/HeuristicLab.Persistence/4.0/Transformers
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/PersistenceOverhaul/HeuristicLab.Persistence/4.0/Transformers/StorableClassTransformer.cs
r14594 r14711 30 30 internal sealed class StorableClassBoxTransformer : BoxTransformer<object> { 31 31 public override bool CanTransformType(Type type) { 32 return StorableClassAttribute.IsStorableClass(type) || type.BaseType != null && CanTransformType(type.BaseType); 32 return StorableTypeAttribute.IsStorableType(type) && !type.IsValueType || // don't transform structs 33 type.BaseType != null && CanTransformType(type.BaseType); 33 34 } 34 35 -
branches/PersistenceOverhaul/HeuristicLab.Persistence/4.0/Transformers/Transformers.cs
r14594 r14711 32 32 using Google.ProtocolBuffers; 33 33 using HeuristicLab.Persistence.Core; 34 using HeuristicLab.Persistence.Default.CompositeSerializers.Storable; 34 35 35 36 namespace HeuristicLab.Persistence { … … 548 549 foreach (var t in components) { 549 550 string name = mapper.GetString(t.Key); 550 MemberInfo[] mis = type.GetMember(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); 551 MemberInfo[] mis = type.GetMember(name, BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic); 551 552 if (mis.Length != 1) 552 553 throw new Exception("ambiguous struct member name " + name); 553 554 MemberInfo mi = mis[0]; 555 if(StorableAttribute.IsStorable(mi)) 556 throw new PersistenceException("Don't use stroable attributes for structs as all fields are serialized automatically."); 554 557 if (mi.MemberType == MemberTypes.Field) 555 558 ((FieldInfo)mi).SetValue(obj, mapper.GetObject(t.Value)); … … 916 919 var comparer = propertyInfo.GetValue(value); 917 920 var comparerType = comparer.GetType(); 918 if (Default.CompositeSerializers.Storable.Storable ClassAttribute.IsStorableClass(comparerType))921 if (Default.CompositeSerializers.Storable.StorableTypeAttribute.IsStorableType(comparerType)) 919 922 uIntArrayBox.AddValues(mapper.GetBoxId(comparer)); 920 923 else if (comparerType.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy).Any()) … … 986 989 987 990 var comparerType = comparer.GetType(); 988 if (Default.CompositeSerializers.Storable.Storable ClassAttribute.IsStorableClass(comparerType))991 if (Default.CompositeSerializers.Storable.StorableTypeAttribute.IsStorableType(comparerType)) 989 992 dictionaryBox.SetComparerId(mapper.GetBoxId(comparer)); 990 993 else if (comparerType.GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.FlattenHierarchy).Any())
Note: See TracChangeset
for help on using the changeset viewer.