Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
GenericDictionarySerializer.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 using SharpYaml.Serialization;
6 using SharpYaml.Serialization.Serializers;
7 
8 using SiliconStudio.Assets.Serializers;
9 using SiliconStudio.Core.Reflection;
10 using SiliconStudio.Core.Yaml;
11 using SiliconStudio.Paradox.Assets.Materials;
12 
14 
15 namespace SiliconStudio.Paradox.Assets.Serializers
16 {
17  [YamlSerializerFactory]
18  internal class GenericDictionarySerializer : 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 void WriteDictionaryItems(ref ObjectContext objectContext)
27  {
28  //TODO: make SortKeyForMapping accessible in object context since it modifies the behavior of the serializer for children of the GenericDictionary
29  var savedSettings = objectContext.Settings.SortKeyForMapping;
30  objectContext.Settings.SortKeyForMapping = false;
31  base.WriteDictionaryItems(ref objectContext);
32  objectContext.Settings.SortKeyForMapping = savedSettings;
33  }
34 
35  public bool CanVisit(Type type)
36  {
37  return typeof(GenericDictionary).IsAssignableFrom(type);
38  }
39 
40  public void Visit(ref VisitorContext context)
41  {
42  // Visit a GenericDictionary without visiting properties
43  context.Visitor.VisitObject(context.Instance, context.Descriptor, false);
44  }
45  }
46 }
A custom dictionary to keep track of the order the elements were inserted.
SharpYaml.Serialization.ITypeDescriptor ITypeDescriptor
A custom visitor used by DataVisitorBase.
Provides access members of a type.