Paradox Game Engine  v1.0.0 beta06
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Events Macros Pages
SourceCodeAssetSerializer.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.IO;
6 using System.Text;
7 using SiliconStudio.Core.Yaml;
8 
9 namespace SiliconStudio.Assets.Serializers
10 {
11  internal class SourceCodeAssetSerializer : IAssetSerializer, IAssetSerializerFactory
12  {
13  private static readonly Dictionary<string, Type> RegisteredExtensions = new Dictionary<string, Type>(StringComparer.InvariantCultureIgnoreCase);
14 
15  public static readonly SourceCodeAssetSerializer Default = new SourceCodeAssetSerializer();
16 
17  public static void RegisterExtension(Type assetType, string assetFileExtension)
18  {
19  if (assetFileExtension == null) throw new ArgumentNullException("assetFileExtension");
20  if (!typeof(SourceCodeAsset).IsAssignableFrom(assetType))
21  throw new ArgumentException("Asset type must inherit SourceCodeAsset", "assetType");
22 
23  RegisteredExtensions.Add(assetFileExtension, assetType);
24  }
25 
26  public object Load(Stream stream, string assetFileExtension)
27  {
28  var type = RegisteredExtensions[assetFileExtension];
29  var asset = (SourceCodeAsset)Activator.CreateInstance(type);
30  asset.Text = new StreamReader(stream).ReadToEnd();
31  return asset;
32  }
33 
34  public void Save(Stream stream, object asset)
35  {
36  using (var writer = new StreamWriter(stream, Encoding.UTF8, 16384, true))
37  {
38  writer.Write(((SourceCodeAsset)asset).Text);
39  }
40  }
41 
42  public IAssetSerializer TryCreate(string assetFileExtension)
43  {
44  return RegisteredExtensions.ContainsKey(assetFileExtension) ? this : null;
45  }
46  }
47 
48  internal class AssetYamlSerializer : IAssetSerializer, IAssetSerializerFactory
49  {
50  public object Load(Stream stream, string assetFileExtension)
51  {
52  return YamlSerializer.Deserialize(stream);
53  }
54 
55  public void Save(Stream stream, object asset)
56  {
57  YamlSerializer.Serialize(stream, asset);
58  }
59 
60  public IAssetSerializer TryCreate(string assetFileExtension)
61  {
62  return this;
63  }
64  }
65 }
System.Text.Encoding Encoding
Use the default mode depending on the type of the field/property.