- Timestamp:
- 03/18/09 18:13:40 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/New Persistence Exploration/Persistence/Persistence/Serializer.cs
r1356 r1357 3 3 using System; 4 4 using System.Linq; 5 using HeuristicLab.Persistence.Interfaces; 5 6 6 namespace Persistence {7 namespace HeuristicLab.Persistence { 7 8 8 9 public class Serializer : IEnumerable<ISerializationToken> { … … 46 47 } 47 48 49 48 50 private IEnumerator<ISerializationToken> Serialize(DataMemberAccessor accessor) { 49 50 51 object value = accessor.Get(); 51 52 if (value == null) { 53 yield return new NullReferenceToken(accessor.Name); 54 yield break; 55 } 56 57 if (obj2id.ContainsKey(value)) { 58 yield return new ReferenceToken(accessor.Name, obj2id[value]); 59 yield break; 60 } 61 52 if (value == null) 53 return NullReferenceEnumeration(accessor.Name); 54 if (obj2id.ContainsKey(value)) 55 return ReferenceTokenEnumeration(accessor.Name, obj2id[value]); 62 56 if ( ! typeCache.ContainsKey(value.GetType())) 63 57 typeCache.Add(value.GetType(), typeCache.Count); 64 58 int typeId = typeCache[value.GetType()]; 65 66 59 int? id = null; 67 60 if ( ! value.GetType().IsValueType) { … … 69 62 obj2id.Add(value, (int)id); 70 63 } 64 IFormatter formatter = persistenceConfiguration.GetFormatter(XmlFormat.Instance, value.GetType()); 65 if (formatter != null) 66 return PrimitiveEnumeration(accessor.Name, typeId, formatter.Serialize(value), id); 67 IDecomposer decomposer = persistenceConfiguration.GetDecomposer(value.GetType()); 68 if (decomposer != null) 69 return CompositeEnumeration(accessor.Name, decomposer.Serialize(value), id, typeId); 70 return StorableEnumeration(accessor.Name, value, id, typeId); 71 } 71 72 72 IFormatter formatter = persistenceConfiguration.GetFormatter(XmlFormat.Instance, value.GetType()); 73 if (formatter != null) { 74 yield return new PrimitiveToken( 75 accessor.Name, 76 typeId, 77 formatter.Serialize(value), 78 id); 79 yield break; 80 } 81 82 yield return new BeginToken(accessor.Name, typeId, id); 83 IDecomposer decomposer = persistenceConfiguration.GetDecomposer(value.GetType()); 73 private IEnumerator<ISerializationToken> NullReferenceEnumeration(string name) { 74 yield return new NullReferenceToken(name); 75 } 84 76 85 if (decomposer != null) { 86 foreach (object o in decomposer.Serialize(value)) { 77 private IEnumerator<ISerializationToken> ReferenceTokenEnumeration(string name, int id) { 78 yield return new ReferenceToken(name, id); 79 } 80 81 private IEnumerator<ISerializationToken> PrimitiveEnumeration(string name, int typeId, object serializedValue, int? id) { 82 yield return new PrimitiveToken(name, typeId, serializedValue, id); 83 } 84 85 private IEnumerator<ISerializationToken> CompositeEnumeration(string name, IEnumerable values, int? id, int typeId) { 86 yield return new BeginToken(name, typeId, id); 87 foreach (object o in values) { 87 88 IEnumerator<ISerializationToken> iterator = Serialize(new DataMemberAccessor(o)); 88 89 while (iterator.MoveNext()) 89 90 yield return iterator.Current; 90 91 } 91 yield return new EndToken(accessor.Name, typeId, id); 92 yield break; 93 } 92 yield return new EndToken(name, typeId, id); 93 } 94 94 95 private IEnumerator<ISerializationToken> StorableEnumeration(string name, object value, int? id, int typeId) { 96 yield return new BeginToken(name, typeId, id); 95 97 int nSubComponents = 0; 96 98 foreach (KeyValuePair<string, DataMemberAccessor> mapping in … … 107 109 value.GetType().FullName)); 108 110 } 109 yield return new EndToken( accessor.Name, typeId, id);111 yield return new EndToken(name, typeId, id); 110 112 } 111 112 113 } 114 115 113 116 }
Note: See TracChangeset
for help on using the changeset viewer.