Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
NullableSerializer.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 
5 namespace SiliconStudio.Core.Serialization.Serializers
6 {
7  /// <summary>
8  /// Data serializer for Nullable{T}.
9  /// </summary>
10  /// <typeparam name="T">The generic type in Nullable{T}.</typeparam>
11  [DataSerializerGlobal(typeof(NullableSerializer<>), typeof(Nullable<>), DataSerializerGenericMode.GenericArguments)]
12  public class NullableSerializer<T> : DataSerializer<T?>, IDataSerializerInitializer where T : struct
13  {
14  private DataSerializer<T> itemSerializer;
15 
16  /// <inheritdoc/>
17  public void Initialize(SerializerSelector serializerSelector)
18  {
19  itemSerializer = serializerSelector.GetSerializer<T>();
20  }
21 
22  /// <inheritdoc/>
23  public override void Serialize(ref T? obj, ArchiveMode mode, SerializationStream stream)
24  {
25  if (mode == ArchiveMode.Serialize)
26  {
27  bool hasValue = obj.HasValue;
28  stream.Serialize(ref hasValue);
29  if (obj.HasValue)
30  {
31  T value = obj.Value;
32  itemSerializer.Serialize(ref value, mode, stream);
33  }
34  }
35  else if (mode == ArchiveMode.Deserialize)
36  {
37  bool hasValue = false;
38  stream.Serialize(ref hasValue);
39  if (hasValue)
40  {
41  T value = default(T);
42  itemSerializer.Serialize(ref value, mode, stream);
43  obj = value;
44  }
45  else
46  obj = null;
47  }
48  }
49  }
50 }
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)
Base class for implementation of SerializationStream.
Adds initialization feature to a DataSerializer.
Serializer context. It holds DataSerializer{T} objects and their factories.
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
Describes how to serialize and deserialize an object of a given type.