Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
ParameterKeyDictionarySerializer.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 
6 using SharpYaml.Serialization;
7 using SharpYaml.Serialization.Serializers;
8 
9 using SiliconStudio.Core.Reflection;
10 using SiliconStudio.Core.Yaml;
11 using SiliconStudio.Paradox.Effects;
12 
14 
15 namespace SiliconStudio.Paradox.Assets.Serializers
16 {
17  [YamlSerializerFactory]
18  internal class ParameterKeyDictionarySerializer : DictionarySerializer, IDataCustomVisitor
19  {
20  public override IYamlSerializable TryCreate(SerializerContext context, ITypeDescriptor typeDescriptor)
21  {
22  var type = typeDescriptor.Type;
23  return CanVisit(type) ? this : null;
24  }
25 
26  protected override KeyValuePair<object, object> ReadDictionaryItem(ref ObjectContext objectContext, KeyValuePair<Type, Type> keyValueType)
27  {
28  var keyValue = base.ReadDictionaryItem(ref objectContext, keyValueType);
29  // For value types, try to convert to their real type
30  if (keyValue.Value != null && keyValue.GetType().IsValueType)
31  {
32  keyValue = new KeyValuePair<object, object>(keyValue.Key, ((ParameterKey)keyValue.Key).ConvertValue(keyValue.Value));
33  }
34  return keyValue;
35  }
36 
37  public bool CanVisit(Type type)
38  {
39  return typeof(IDictionary<ParameterKey, object>).IsAssignableFrom(type);
40  }
41 
42  public void Visit(ref VisitorContext context)
43  {
44  // Visit a GenericDictionary without visiting properties
45  context.Visitor.VisitObject(context.Instance, context.Descriptor, false);
46  }
47  }
48 }
Key of an effect parameter.
Definition: ParameterKey.cs:15
SharpYaml.Serialization.ITypeDescriptor ITypeDescriptor
A custom visitor used by DataVisitorBase.
Provides access members of a type.