Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
CollectionSerializers.cs
Go to the documentation of this file.
1 // Copyright (c) 2014 Silicon Studio Corp. (http://siliconstudio.co.jp)
2 // This file is distributed under GPL v3. See LICENSE.md for details.
3 using System;
4 using System.Collections.Generic;
5 using System.Linq;
6 using System.Reflection;
7 using System.Runtime.InteropServices;
8 using System.Text;
9 using System.Collections;
10 using SiliconStudio.Core.Reflection;
11 
12 namespace SiliconStudio.Core.Serialization.Serializers
13 {
14  /// <summary>
15  /// Data serializer for List{T}.
16  /// </summary>
17  /// <typeparam name="T">Generics type of List{T}.</typeparam>
18  [DataSerializerGlobal(typeof(ListSerializer<>), typeof(List<>), DataSerializerGenericMode.GenericArguments)]
20  {
21  private DataSerializer<T> itemDataSerializer;
22 
23  /// <inheritdoc/>
24  public void Initialize(SerializerSelector serializerSelector)
25  {
26  itemDataSerializer = MemberSerializer<T>.Create(serializerSelector);
27  }
28 
29  public override void PreSerialize(ref List<T> obj, ArchiveMode mode, SerializationStream stream)
30  {
31  if (mode == ArchiveMode.Deserialize)
32  {
33  if (obj == null)
34  obj = new List<T>();
35  else
36  obj.Clear();
37  }
38  }
39 
40  /// <inheritdoc/>
41  public override void Serialize(ref List<T> obj, ArchiveMode mode, SerializationStream stream)
42  {
43  if (mode == ArchiveMode.Deserialize)
44  {
45  int count = stream.ReadInt32();
46  obj.Capacity = count;
47  for (int i = 0; i < count; ++i)
48  {
49  T value = default(T);
50  itemDataSerializer.Serialize(ref value, mode, stream);
51  obj.Add(value);
52  }
53  }
54  else if (mode == ArchiveMode.Serialize)
55  {
56  stream.Write(obj.Count);
57  foreach (T item in obj)
58  {
59  itemDataSerializer.Serialize(item, stream);
60  }
61  }
62  }
63 
64  public void EnumerateGenericInstantiations(SerializerSelector serializerSelector, IList<Type> genericInstantiations)
65  {
66  genericInstantiations.Add(typeof(T));
67  }
68  }
69 
70  /// <summary>
71  /// Data serializer for IList{T}.
72  /// </summary>
73  /// <typeparam name="T">Generics type of IList{T}.</typeparam>
74  public class ListAllSerializer<TList, T> : DataSerializer<TList>, IDataSerializerInitializer, IDataSerializerGenericInstantiation where TList : class, IList<T>
75  {
76  private bool isInterface = typeof(TList).GetTypeInfo().IsInterface;
77  private DataSerializer<T> itemDataSerializer;
78 
79  /// <inheritdoc/>
80  public void Initialize(SerializerSelector serializerSelector)
81  {
82  itemDataSerializer = MemberSerializer<T>.Create(serializerSelector);
83  }
84 
85  public override void PreSerialize(ref TList obj, ArchiveMode mode, SerializationStream stream)
86  {
87  if (mode == ArchiveMode.Deserialize)
88  {
89  if (obj == null)
90  obj = isInterface ? (TList)(object)new List<T>() : Activator.CreateInstance<TList>();
91  else
92  obj.Clear();
93  }
94  }
95 
96  /// <inheritdoc/>
97  public override void Serialize(ref TList obj, ArchiveMode mode, SerializationStream stream)
98  {
99  if (mode == ArchiveMode.Deserialize)
100  {
101  int count = stream.ReadInt32();
102  for (int i = 0; i < count; ++i)
103  {
104  T value = default(T);
105  itemDataSerializer.Serialize(ref value, mode, stream);
106  obj.Add(value);
107  }
108  }
109  else if (mode == ArchiveMode.Serialize)
110  {
111  stream.Write(obj.Count);
112  foreach (T item in obj)
113  {
114  itemDataSerializer.Serialize(item, stream);
115  }
116  }
117  }
118 
119  public void EnumerateGenericInstantiations(SerializerSelector serializerSelector, IList<Type> genericInstantiations)
120  {
121  genericInstantiations.Add(typeof(T));
122  }
123  }
124 
125 
126  /// <summary>
127  /// Data serializer for SortedList{TKey, TValue}.
128  /// </summary>
129  /// <typeparam name="TKey">The type of the key in SortedList{TKey, TValue}.</typeparam>
130  /// <typeparam name="TValue">The type of the value in SortedList{TKey, TValue}.</typeparam>
131  [DataSerializerGlobal(typeof(SortedListSerializer<,>), typeof(SiliconStudio.Core.Collections.SortedList<,>), DataSerializerGenericMode.GenericArguments)]
132  public class SortedListSerializer<TKey, TValue> : DataSerializer<SiliconStudio.Core.Collections.SortedList<TKey, TValue>>, IDataSerializerInitializer, IDataSerializerGenericInstantiation
133  {
134  private DataSerializer<TKey> keySerializer;
135  private DataSerializer<TValue> valueSerializer;
136 
137  /// <inheritdoc/>
138  public void Initialize(SerializerSelector serializerSelector)
139  {
140  // Key should never be null
141  keySerializer = MemberSerializer<TKey>.Create(serializerSelector, false);
142  valueSerializer = MemberSerializer<TValue>.Create(serializerSelector);
143  }
144 
145  public override void PreSerialize(ref SiliconStudio.Core.Collections.SortedList<TKey, TValue> obj, ArchiveMode mode, SerializationStream stream)
146  {
147  if (mode == ArchiveMode.Deserialize)
148  {
149  // TODO: Peek the SortedList size
150  if (obj == null)
151  obj = new SiliconStudio.Core.Collections.SortedList<TKey, TValue>();
152  else
153  obj.Clear();
154  }
155  }
156 
157  /// <inheritdoc/>
158  public override void Serialize(ref SiliconStudio.Core.Collections.SortedList<TKey, TValue> obj, ArchiveMode mode, SerializationStream stream)
159  {
160  if (mode == ArchiveMode.Deserialize)
161  {
162  // Should be null if it was
163  int count = stream.ReadInt32();
164  for (int i = 0; i < count; ++i)
165  {
166  TKey key = default(TKey);
167  TValue value = default(TValue);
168  keySerializer.Serialize(ref key, mode, stream);
169  valueSerializer.Serialize(ref value, mode, stream);
170  obj.Add(key, value);
171  }
172  }
173  else if (mode == ArchiveMode.Serialize)
174  {
175  stream.Write(obj.Count);
176  foreach (var item in obj)
177  {
178  keySerializer.Serialize(item.Key, stream);
179  valueSerializer.Serialize(item.Value, stream);
180  }
181  }
182  }
183 
184  public void EnumerateGenericInstantiations(SerializerSelector serializerSelector, IList<Type> genericInstantiations)
185  {
186  genericInstantiations.Add(typeof(TKey));
187  genericInstantiations.Add(typeof(TValue));
188  }
189  }
190 
191 
192  /// <summary>
193  /// Data serializer for IList{T}.
194  /// </summary>
195  /// <typeparam name="T">Generics type of IList{T}.</typeparam>
196  [DataSerializerGlobal(typeof(ListInterfaceSerializer<>), typeof(IList<>), DataSerializerGenericMode.GenericArguments)]
197  public class ListInterfaceSerializer<T> : DataSerializer<IList<T>>, IDataSerializerInitializer, IDataSerializerGenericInstantiation
198  {
199  private DataSerializer<T> itemDataSerializer;
200 
201  /// <inheritdoc/>
202  public void Initialize(SerializerSelector serializerSelector)
203  {
204  itemDataSerializer = MemberSerializer<T>.Create(serializerSelector);
205  }
206 
207  public override void PreSerialize(ref IList<T> obj, ArchiveMode mode, SerializationStream stream)
208  {
209  if (mode == ArchiveMode.Deserialize)
210  {
211  if (obj == null)
212  obj = new List<T>();
213  else
214  obj.Clear();
215  }
216  }
217 
218  /// <inheritdoc/>
219  public override void Serialize(ref IList<T> obj, ArchiveMode mode, SerializationStream stream)
220  {
221  if (mode == ArchiveMode.Deserialize)
222  {
223  int count = stream.ReadInt32();
224  for (int i = 0; i < count; ++i)
225  {
226  T value = default(T);
227  itemDataSerializer.Serialize(ref value, mode, stream);
228  obj.Add(value);
229  }
230  }
231  else if (mode == ArchiveMode.Serialize)
232  {
233  stream.Write(obj.Count);
234  foreach (T item in obj)
235  {
236  itemDataSerializer.Serialize(item, stream);
237  }
238  }
239  }
240 
241  public void EnumerateGenericInstantiations(SerializerSelector serializerSelector, IList<Type> genericInstantiations)
242  {
243  genericInstantiations.Add(typeof(T));
244 
245  // Force concrete type to be implemented (that's what will likely be used with this interface)
246  genericInstantiations.Add(typeof(List<T>));
247  }
248  }
249 
250  /// <summary>
251  /// Data serializer for T[].
252  /// </summary>
253  /// <typeparam name="T">Generics type of T[].</typeparam>
255  {
256  private DataSerializer<T> itemDataSerializer;
257 
258  /// <inheritdoc/>
259  public virtual void Initialize(SerializerSelector serializerSelector)
260  {
261  itemDataSerializer = MemberSerializer<T>.Create(serializerSelector);
262  }
263 
264  public override void PreSerialize(ref T[] obj, ArchiveMode mode, SerializationStream stream)
265  {
266  if (mode == ArchiveMode.Serialize)
267  {
268  stream.Write(obj.Length);
269  }
270  else if (mode == ArchiveMode.Deserialize)
271  {
272  int length = stream.ReadInt32();
273  obj = new T[length];
274  }
275  }
276 
277  /// <inheritdoc/>
278  public override void Serialize(ref T[] obj, ArchiveMode mode, SerializationStream stream)
279  {
280  if (mode == ArchiveMode.Deserialize)
281  {
282  int count = obj.Length;
283  for (int i = 0; i < count; ++i)
284  {
285  itemDataSerializer.Serialize(ref obj[i], mode, stream);
286  }
287  }
288  else if (mode == ArchiveMode.Serialize)
289  {
290  int count = obj.Length;
291  for (int i = 0; i < count; ++i)
292  {
293  itemDataSerializer.Serialize(ref obj[i], mode, stream);
294  }
295  }
296  }
297 
298  public void EnumerateGenericInstantiations(SerializerSelector serializerSelector, IList<Type> genericInstantiations)
299  {
300  genericInstantiations.Add(typeof(T));
301  }
302  }
303 
304  /// <summary>
305  /// Data serializer for blittable T[].
306  /// </summary>
307  /// <typeparam name="T">Generics type of T[].</typeparam>
308  public class BlittableArraySerializer<T> : ArraySerializer<T>
309  {
310  private int elementSize;
311 
312  /// <inheritdoc/>
313  public override void Initialize(SerializerSelector serializerSelector)
314  {
315  elementSize = Marshal.SizeOf(typeof(T));
316  }
317 
318  /// <inheritdoc/>
319  public unsafe override void Serialize(ref T[] obj, ArchiveMode mode, SerializationStream stream)
320  {
321  int size = obj.Length * elementSize;
322  var objPinned = Interop.Fixed(obj);
323  if (mode == ArchiveMode.Deserialize)
324  {
325  stream.NativeStream.Read((IntPtr)objPinned, size);
326  }
327  else if (mode == ArchiveMode.Serialize)
328  {
329  stream.NativeStream.Write((IntPtr)objPinned, size);
330  }
331  }
332  }
333 
334  /// <summary>
335  /// Data serializer for KeyValuePair{TKey, TValue}.
336  /// </summary>
337  /// <typeparam name="TKey">The type of the key in KeyValuePair{TKey, TValue}.</typeparam>
338  /// <typeparam name="TValue">The type of the value in KeyValuePair{TKey, TValue}.</typeparam>
339  [DataSerializerGlobal(typeof(KeyValuePairSerializer<,>), typeof(KeyValuePair<,>), DataSerializerGenericMode.GenericArguments)]
340  public class KeyValuePairSerializer<TKey, TValue> : DataSerializer<KeyValuePair<TKey, TValue>>, IDataSerializerInitializer, IDataSerializerGenericInstantiation
341  {
342  private DataSerializer<TKey> keySerializer;
343  private DataSerializer<TValue> valueSerializer;
344 
345  /// <inheritdoc/>
346  public void Initialize(SerializerSelector serializerSelector)
347  {
348  // Key should never be null
349  keySerializer = MemberSerializer<TKey>.Create(serializerSelector);
350  valueSerializer = MemberSerializer<TValue>.Create(serializerSelector);
351  }
352 
353  /// <inheritdoc/>
354  public override void Serialize(ref KeyValuePair<TKey, TValue> obj, ArchiveMode mode, SerializationStream stream)
355  {
356  if (mode == ArchiveMode.Deserialize)
357  {
358  TKey key = default(TKey);
359  TValue value = default(TValue);
360  keySerializer.Serialize(ref key, mode, stream);
361  valueSerializer.Serialize(ref value, mode, stream);
362  obj = new KeyValuePair<TKey, TValue>(key, value);
363  }
364  else if (mode == ArchiveMode.Serialize)
365  {
366  keySerializer.Serialize(obj.Key, stream);
367  valueSerializer.Serialize(obj.Value, stream);
368  }
369  }
370 
371  public void EnumerateGenericInstantiations(SerializerSelector serializerSelector, IList<Type> genericInstantiations)
372  {
373  genericInstantiations.Add(typeof(TKey));
374  genericInstantiations.Add(typeof(TValue));
375  }
376  }
377 
378  /// <summary>
379  /// Data serializer for Dictionary{TKey, TValue}.
380  /// </summary>
381  /// <typeparam name="TKey">The type of the key in Dictionary{TKey, TValue}.</typeparam>
382  /// <typeparam name="TValue">The type of the value in Dictionary{TKey, TValue}.</typeparam>
383  [DataSerializerGlobal(typeof(DictionarySerializer<,>), typeof(Dictionary<,>), DataSerializerGenericMode.GenericArguments)]
385  {
386  private DataSerializer<TKey> keySerializer;
387  private DataSerializer<TValue> valueSerializer;
388 
389  /// <inheritdoc/>
390  public void Initialize(SerializerSelector serializerSelector)
391  {
392  // Key should never be null
393  keySerializer = MemberSerializer<TKey>.Create(serializerSelector, false);
394  valueSerializer = MemberSerializer<TValue>.Create(serializerSelector);
395  }
396 
397  public override void PreSerialize(ref Dictionary<TKey, TValue> obj, ArchiveMode mode, SerializationStream stream)
398  {
399  if (mode == ArchiveMode.Deserialize)
400  {
401  // TODO: Peek the dictionary size
402  if (obj == null)
403  obj = new Dictionary<TKey, TValue>();
404  else
405  obj.Clear();
406  }
407  }
408 
409  /// <inheritdoc/>
410  public override void Serialize(ref Dictionary<TKey, TValue> obj, ArchiveMode mode, SerializationStream stream)
411  {
412  if (mode == ArchiveMode.Deserialize)
413  {
414  // Should be null if it was
415  int count = stream.ReadInt32();
416  for (int i = 0; i < count; ++i)
417  {
418  TKey key = default(TKey);
419  TValue value = default(TValue);
420  keySerializer.Serialize(ref key, mode, stream);
421  valueSerializer.Serialize(ref value, mode, stream);
422  obj.Add(key, value);
423  }
424  }
425  else if (mode == ArchiveMode.Serialize)
426  {
427  stream.Write(obj.Count);
428  foreach (var item in obj)
429  {
430  keySerializer.Serialize(item.Key, stream);
431  valueSerializer.Serialize(item.Value, stream);
432  }
433  }
434  }
435 
436  public void EnumerateGenericInstantiations(SerializerSelector serializerSelector, IList<Type> genericInstantiations)
437  {
438  genericInstantiations.Add(typeof(TKey));
439  genericInstantiations.Add(typeof(TValue));
440  }
441  }
442 
443  public class DictionaryAllSerializer<TDictionary, TKey, TValue> : DataSerializer<TDictionary>, IDataSerializerInitializer, IDataSerializerGenericInstantiation where TDictionary : class, IDictionary<TKey, TValue>
444  {
445  private bool isInterface = typeof(TDictionary).GetTypeInfo().IsInterface;
446  private DataSerializer<TKey> keySerializer;
447  private DataSerializer<TValue> valueSerializer;
448 
449  /// <inheritdoc/>
450  public void Initialize(SerializerSelector serializerSelector)
451  {
452  // Key should never be null
453  keySerializer = MemberSerializer<TKey>.Create(serializerSelector, false);
454  valueSerializer = MemberSerializer<TValue>.Create(serializerSelector);
455  }
456 
457  public override void PreSerialize(ref TDictionary obj, ArchiveMode mode, SerializationStream stream)
458  {
459  if (mode == ArchiveMode.Deserialize)
460  {
461  // TODO: Peek the dictionary size
462  if (obj == null)
463  obj = isInterface ? (TDictionary)(object)new Dictionary<TKey, TValue>() : Activator.CreateInstance<TDictionary>();
464  else
465  obj.Clear();
466  }
467  }
468 
469  /// <inheritdoc/>
470  public override void Serialize(ref TDictionary obj, ArchiveMode mode, SerializationStream stream)
471  {
472  if (mode == ArchiveMode.Deserialize)
473  {
474  // Should be null if it was
475  int count = stream.ReadInt32();
476  for (int i = 0; i < count; ++i)
477  {
478  TKey key = default(TKey);
479  TValue value = default(TValue);
480  keySerializer.Serialize(ref key, mode, stream);
481  valueSerializer.Serialize(ref value, mode, stream);
482  obj.Add(key, value);
483  }
484  }
485  else if (mode == ArchiveMode.Serialize)
486  {
487  stream.Write(obj.Count);
488  foreach (var item in obj)
489  {
490  keySerializer.Serialize(item.Key, stream);
491  valueSerializer.Serialize(item.Value, stream);
492  }
493  }
494  }
495 
496  public void EnumerateGenericInstantiations(SerializerSelector serializerSelector, IList<Type> genericInstantiations)
497  {
498  genericInstantiations.Add(typeof(TKey));
499  genericInstantiations.Add(typeof(TValue));
500  }
501  }
502 
503  /// <summary>
504  /// Data serializer for IDictionary{TKey, TValue}.
505  /// </summary>
506  /// <typeparam name="TKey">The type of the key in IDictionary{TKey, TValue}.</typeparam>
507  /// <typeparam name="TValue">The type of the value in IDictionary{TKey, TValue}.</typeparam>
508  [DataSerializerGlobal(typeof(DictionaryInterfaceSerializer<,>), typeof(IDictionary<,>), DataSerializerGenericMode.GenericArguments)]
509  public class DictionaryInterfaceSerializer<TKey, TValue> : DataSerializer<IDictionary<TKey, TValue>>, IDataSerializerInitializer, IDataSerializerGenericInstantiation
510  {
511  private DataSerializer<TKey> keySerializer;
512  private DataSerializer<TValue> valueSerializer;
513 
514  /// <inheritdoc/>
515  public void Initialize(SerializerSelector serializerSelector)
516  {
517  // Key should never be null
518  keySerializer = MemberSerializer<TKey>.Create(serializerSelector, false);
519  valueSerializer = MemberSerializer<TValue>.Create(serializerSelector);
520  }
521 
522  public override void PreSerialize(ref IDictionary<TKey, TValue> obj, ArchiveMode mode, SerializationStream stream)
523  {
524  if (mode == ArchiveMode.Deserialize)
525  {
526  // TODO: Peek the dictionary size
527  if (obj == null)
528  obj = new Dictionary<TKey, TValue>();
529  else
530  obj.Clear();
531  }
532  }
533 
534  /// <inheritdoc/>
535  public override void Serialize(ref IDictionary<TKey, TValue> obj, ArchiveMode mode, SerializationStream stream)
536  {
537  if (mode == ArchiveMode.Deserialize)
538  {
539  // Should be null if it was
540  int count = stream.ReadInt32();
541  for (int i = 0; i < count; ++i)
542  {
543  TKey key = default(TKey);
544  TValue value = default(TValue);
545  keySerializer.Serialize(ref key, mode, stream);
546  valueSerializer.Serialize(ref value, mode, stream);
547  obj.Add(key, value);
548  }
549  }
550  else if (mode == ArchiveMode.Serialize)
551  {
552  stream.Write(obj.Count);
553  foreach (var item in obj)
554  {
555  keySerializer.Serialize(item.Key, stream);
556  valueSerializer.Serialize(item.Value, stream);
557  }
558  }
559  }
560 
561  public void EnumerateGenericInstantiations(SerializerSelector serializerSelector, IList<Type> genericInstantiations)
562  {
563  genericInstantiations.Add(typeof(TKey));
564  genericInstantiations.Add(typeof(TValue));
565 
566  // Force concrete type to be implemented (that's what will likely be used with this interface)
567  genericInstantiations.Add(typeof(Dictionary<TKey, TValue>));
568  }
569  }
570 }
void EnumerateGenericInstantiations(SerializerSelector serializerSelector, IList< Type > genericInstantiations)
Enumerates required DataSerializer required by this instance of DataSerializer. Null is authorized in...
void EnumerateGenericInstantiations(SerializerSelector serializerSelector, IList< Type > genericInstantiations)
Enumerates required DataSerializer required by this instance of DataSerializer. Null is authorized in...
override void Serialize(ref Dictionary< TKey, TValue > obj, ArchiveMode mode, SerializationStream stream)
void EnumerateGenericInstantiations(SerializerSelector serializerSelector, IList< Type > genericInstantiations)
Enumerates required DataSerializer required by this instance of DataSerializer. Null is authorized in...
virtual void Initialize(SerializerSelector serializerSelector)
Initializes the specified serializer. The serializer.
override void PreSerialize(ref IList< T > obj, ArchiveMode mode, SerializationStream stream)
void EnumerateGenericInstantiations(SerializerSelector serializerSelector, IList< Type > genericInstantiations)
Enumerates required DataSerializer required by this instance of DataSerializer. Null is authorized in...
override void PreSerialize(ref SiliconStudio.Core.Collections.SortedList< TKey, TValue > obj, ArchiveMode mode, SerializationStream stream)
void Initialize(SerializerSelector serializerSelector)
Initializes the specified serializer. The serializer.
void Initialize(SerializerSelector serializerSelector)
Initializes the specified serializer. The serializer.
DataSerializerGenericMode
Defines what generic parameters to pass to the serializer.
override void Serialize(ref T[] obj, ArchiveMode mode, SerializationStream stream)
void Initialize(SerializerSelector serializerSelector)
Initializes the specified serializer. The serializer.
override void Serialize(ref IDictionary< TKey, TValue > obj, ArchiveMode mode, SerializationStream stream)
void Initialize(SerializerSelector serializerSelector)
Initializes the specified serializer. The serializer.
override void Initialize(SerializerSelector serializerSelector)
Initializes the specified serializer. The serializer.
void Initialize(SerializerSelector serializerSelector)
Initializes the specified serializer. The serializer.
override void PreSerialize(ref TDictionary obj, ArchiveMode mode, SerializationStream stream)
_In_ size_t count
Definition: DirectXTexP.h:174
override void Serialize(ref TList obj, ArchiveMode mode, SerializationStream stream)
Base class for implementation of SerializationStream.
void EnumerateGenericInstantiations(SerializerSelector serializerSelector, IList< Type > genericInstantiations)
Enumerates required DataSerializer required by this instance of DataSerializer. Null is authorized in...
Adds initialization feature to a DataSerializer.
Helper for serializing members of a class.
void EnumerateGenericInstantiations(SerializerSelector serializerSelector, IList< Type > genericInstantiations)
Enumerates required DataSerializer required by this instance of DataSerializer. Null is authorized in...
override void Serialize(ref SiliconStudio.Core.Collections.SortedList< TKey, TValue > obj, ArchiveMode mode, SerializationStream stream)
void EnumerateGenericInstantiations(SerializerSelector serializerSelector, IList< Type > genericInstantiations)
Enumerates required DataSerializer required by this instance of DataSerializer. Null is authorized in...
override void Serialize(ref List< T > obj, ArchiveMode mode, SerializationStream stream)
override void PreSerialize(ref IDictionary< TKey, TValue > obj, ArchiveMode mode, SerializationStream stream)
Serializer context. It holds DataSerializer{T} objects and their factories.
void Initialize(SerializerSelector serializerSelector)
Initializes the specified serializer. The serializer.
override void Serialize(ref TDictionary obj, ArchiveMode mode, SerializationStream stream)
override void PreSerialize(ref TList obj, ArchiveMode mode, SerializationStream stream)
override void PreSerialize(ref List< T > obj, ArchiveMode mode, SerializationStream stream)
override void Serialize(ref IList< T > obj, ArchiveMode mode, SerializationStream stream)
Describes how to serialize and deserialize an object without knowing its type. Used as a common base ...
ArchiveMode
Enumerates the different mode of serialization (either serialization or deserialization).
Definition: ArchiveMode.cs:8
void Initialize(SerializerSelector serializerSelector)
Initializes the specified serializer. The serializer.
override void Serialize(ref KeyValuePair< TKey, TValue > obj, ArchiveMode mode, SerializationStream stream)
void EnumerateGenericInstantiations(SerializerSelector serializerSelector, IList< Type > genericInstantiations)
Enumerates required DataSerializer required by this instance of DataSerializer. Null is authorized in...
Describes how to serialize and deserialize an object of a given type.
void EnumerateGenericInstantiations(SerializerSelector serializerSelector, IList< Type > genericInstantiations)
Enumerates required DataSerializer required by this instance of DataSerializer. Null is authorized in...
override void PreSerialize(ref T[] obj, ArchiveMode mode, SerializationStream stream)
_In_ size_t _In_ size_t size
Definition: DirectXTexP.h:175
unsafe override void Serialize(ref T[] obj, ArchiveMode mode, SerializationStream stream)
override void PreSerialize(ref Dictionary< TKey, TValue > obj, ArchiveMode mode, SerializationStream stream)
void Initialize(SerializerSelector serializerSelector)
Initializes the specified serializer. The serializer.