Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
ContentSerializerBase.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 
8 namespace SiliconStudio.Core.Serialization.Contents
9 {
10  /// <summary>
11  /// Base class for Content Serializer with empty virtual implementation.
12  /// </summary>
13  /// <typeparam name="T"></typeparam>
14  public class ContentSerializerBase<T> : IContentSerializer<T>
15  {
16  static readonly bool hasParameterlessConstructor = typeof(T).GetTypeInfo().DeclaredConstructors.Any(x => !x.IsStatic && !x.GetParameters().Any());
17 
18  /// <inheritdoc/>
19  public virtual Type SerializationType
20  {
21  get { return typeof(T); }
22  }
23 
24  /// <inheritdoc/>
25  public virtual Type ActualType
26  {
27  get { return typeof(T); }
28  }
29 
30  /// <inheritdoc/>
31  public virtual object Construct(ContentSerializerContext context)
32  {
33  return hasParameterlessConstructor ? Activator.CreateInstance<T>() : default(T);
34  }
35 
36  /// <inheritdoc/>
37  public virtual void Serialize(ContentSerializerContext context, Serialization.SerializationStream stream, ref T obj)
38  {
39  }
40 
41  /// <inheritdoc/>
42  public void Serialize(ContentSerializerContext context, Serialization.SerializationStream stream, ref object obj)
43  {
44  var objT = (T)obj;
45  Serialize(context, stream, ref objT);
46  obj = objT;
47  }
48  }
49 }
virtual void Serialize(ContentSerializerContext context, Serialization.SerializationStream stream, ref T obj)
void Serialize(ContentSerializerContext context, Serialization.SerializationStream stream, ref object obj)
virtual object Construct(ContentSerializerContext context)