- Timestamp:
- 03/11/09 14:20:51 (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
branches/New Persistence Exploration/Persistence/Persistence/Serializer.cs
r1318 r1323 2 2 using System.Collections; 3 3 using System; 4 using System.Reflection;5 4 6 5 namespace Persistence { … … 8 7 public class Serializer : IEnumerable<ISerializationToken> { 9 8 10 private object obj;11 private string rootName;12 private Dictionary<object, int> obj2id;13 private Dictionary<Type, IPrimitiveSerializer> primitiveSerializers;14 private List<ICompoundSerializer> compoundSerializers;9 private readonly object obj; 10 private readonly string rootName; 11 private readonly Dictionary<object, int> obj2id; 12 private readonly Dictionary<Type, IPrimitiveSerializer> primitiveSerializers; 13 private readonly List<ICompoundSerializer> compoundSerializers; 15 14 16 15 public Serializer(object obj) : … … 34 33 } 35 34 this.compoundSerializers = new List<ICompoundSerializer>(compoundSerializers); 36 this.obj2id = new Dictionary<object, int>(); 37 obj2id.Add(new object(), 0); 38 } 35 obj2id = new Dictionary<object, int> {{new object(), 0}}; 36 } 39 37 40 38 IEnumerator IEnumerable.GetEnumerator() { 41 return this.GetEnumerator();39 return GetEnumerator(); 42 40 } 43 41 44 42 public IEnumerator<ISerializationToken> GetEnumerator() { 45 43 DataMemberAccessor rootAccessor = new DataMemberAccessor( 46 this.rootName, obj.GetType(), null, () => this.obj, null);44 rootName, obj.GetType(), null, () => obj, null); 47 45 IEnumerator<ISerializationToken> iterator = Serialize(rootAccessor); 48 46 while (iterator.MoveNext()) … … 54 52 if (value == null) { 55 53 yield return new NullReferenceToken(accessor.Name); 56 } else if ( this.primitiveSerializers.ContainsKey(value.GetType())) {57 yield return new PrimitiveToken(accessor, this.primitiveSerializers[value.GetType()].Serialize(value));58 } else if ( this.obj2id.ContainsKey(value)) {59 yield return new ReferenceToken(accessor.Name, this.obj2id[value]);54 } else if (primitiveSerializers.ContainsKey(value.GetType())) { 55 yield return new PrimitiveToken(accessor, primitiveSerializers[value.GetType()].Serialize(value)); 56 } else if (obj2id.ContainsKey(value)) { 57 yield return new ReferenceToken(accessor.Name, obj2id[value]); 60 58 } else { 61 59 int id = obj2id.Count; 62 this.obj2id.Add(value, id);60 obj2id.Add(value, id); 63 61 yield return new BeginToken(accessor, id); 64 ICompoundSerializer customSerializer = this.FindCompoundSerializer(value.GetType());62 ICompoundSerializer customSerializer = FindCompoundSerializer(value.GetType()); 65 63 if (customSerializer != null) { 66 foreach (object o bjin customSerializer.Serialize(value)) {67 IEnumerator<ISerializationToken> iterator = this.Serialize(new DataMemberAccessor(obj));64 foreach (object o in customSerializer.Serialize(value)) { 65 IEnumerator<ISerializationToken> iterator = Serialize(new DataMemberAccessor(o)); 68 66 while (iterator.MoveNext()) 69 67 yield return iterator.Current; … … 74 72 StorableAttribute.GetAutostorableAccessors(value)) { 75 73 nSubComponents += 1; 76 IEnumerator<ISerializationToken> iterator = this.Serialize(mapping.Value);74 IEnumerator<ISerializationToken> iterator = Serialize(mapping.Value); 77 75 while (iterator.MoveNext()) { 78 76 yield return iterator.Current;
Note: See TracChangeset
for help on using the changeset viewer.