- Timestamp:
- 06/25/09 16:45:09 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/sources/HeuristicLab.Persistence/3.3/Core/Serializer.cs
r1823 r2106 34 34 private readonly Dictionary<Type, int> typeCache; 35 35 private readonly Configuration configuration; 36 private readonly bool isTestRun; 37 private readonly List<Exception> exceptions; 36 38 37 39 public List<TypeMapping> TypeCache { … … 78 80 this(obj, configuration, "ROOT") { } 79 81 80 public Serializer(object obj, Configuration configuration, string rootName) { 82 public Serializer(object obj, Configuration configuration, string rootName) 83 : this(obj, configuration, rootName, false) { } 84 85 public Serializer(object obj, Configuration configuration, string rootName, bool isTestRun) { 86 81 87 this.obj = obj; 82 88 this.rootName = rootName; … … 84 90 obj2id = new Dictionary<object, int>(new ReferenceEqualityComparer()) { { new object(), 0 } }; 85 91 typeCache = new Dictionary<Type, int>(); 92 this.isTestRun = isTestRun; 93 this.exceptions = new List<Exception>(); 86 94 } 87 95 … … 91 99 92 100 public IEnumerator<ISerializationToken> GetEnumerator() { 93 return Serialize(new DataMemberAccessor(rootName, null, () => obj, null)); 101 var enumerator = Serialize(new DataMemberAccessor(rootName, null, () => obj, null)); 102 if (isTestRun) { 103 return AddExceptionCompiler(enumerator); 104 } else { 105 return enumerator; 106 } 107 } 108 109 public IEnumerator<ISerializationToken> AddExceptionCompiler(IEnumerator<ISerializationToken> enumerator) { 110 while (enumerator.MoveNext()) 111 yield return enumerator.Current; 112 if (exceptions.Count == 1) 113 throw exceptions[0]; 114 if (exceptions.Count > 1) 115 throw new PersistenceException("Multiple exceptions during serialization", exceptions); 94 116 } 95 117 … … 109 131 obj2id.Add(value, (int)id); 110 132 } 111 IPrimitiveSerializer primitiveSerializer = configuration.GetPrimitiveSerializer(type); 112 if (primitiveSerializer != null) 113 return PrimitiveEnumerator(accessor.Name, typeId, primitiveSerializer.Format(value), id); 114 ICompositeSerializer compositeSerializer = configuration.GetCompositeSerializer(type); 115 if (compositeSerializer != null) 116 return CompositeEnumerator(accessor.Name, compositeSerializer.Decompose(value), id, typeId, compositeSerializer.CreateMetaInfo(value)); 117 throw new PersistenceException( 118 String.Format( 119 "No suitable method for serializing values of type \"{0}\" found\r\n" + 120 "primitive serializers:\r\n{1}\r\n" + 121 "composite serializers:\r\n{2}", 122 value.GetType().VersionInvariantName(), 123 string.Join("\r\n", configuration.PrimitiveSerializers.Select(f => f.GetType().VersionInvariantName()).ToArray()), 124 string.Join("\r\n", configuration.CompositeSerializers.Select(d => d.GetType().VersionInvariantName()).ToArray()) 125 )); 126 133 try { 134 IPrimitiveSerializer primitiveSerializer = configuration.GetPrimitiveSerializer(type); 135 if (primitiveSerializer != null) 136 return PrimitiveEnumerator(accessor.Name, typeId, primitiveSerializer.Format(value), id); 137 ICompositeSerializer compositeSerializer = configuration.GetCompositeSerializer(type); 138 if (compositeSerializer != null) 139 return CompositeEnumerator(accessor.Name, compositeSerializer.Decompose(value), id, typeId, compositeSerializer.CreateMetaInfo(value)); 140 throw new PersistenceException( 141 String.Format( 142 "No suitable method for serializing values of type \"{0}\" found\r\n" + 143 "primitive serializers:\r\n{1}\r\n" + 144 "composite serializers:\r\n{2}", 145 value.GetType().VersionInvariantName(), 146 string.Join("\r\n", configuration.PrimitiveSerializers.Select(f => f.GetType().VersionInvariantName()).ToArray()), 147 string.Join("\r\n", configuration.CompositeSerializers.Select(d => d.GetType().VersionInvariantName()).ToArray()) 148 )); 149 } catch (Exception x) { 150 if (isTestRun) { 151 exceptions.Add(x); 152 return new List<ISerializationToken>().GetEnumerator(); 153 } else { 154 throw x; 155 } 156 } 127 157 } 128 158
Note: See TracChangeset
for help on using the changeset viewer.