4 using System.Collections.Generic;
7 using SiliconStudio.Core.Yaml;
9 namespace SiliconStudio.Assets.Serializers
11 internal class SourceCodeAssetSerializer : IAssetSerializer, IAssetSerializerFactory
13 private static readonly Dictionary<string, Type> RegisteredExtensions =
new Dictionary<string, Type>(StringComparer.InvariantCultureIgnoreCase);
15 public static readonly SourceCodeAssetSerializer
Default =
new SourceCodeAssetSerializer();
17 public static void RegisterExtension(Type assetType,
string assetFileExtension)
19 if (assetFileExtension == null)
throw new ArgumentNullException(
"assetFileExtension");
20 if (!typeof(SourceCodeAsset).IsAssignableFrom(assetType))
21 throw new ArgumentException(
"Asset type must inherit SourceCodeAsset",
"assetType");
23 RegisteredExtensions.Add(assetFileExtension, assetType);
26 public object Load(
Stream stream,
string assetFileExtension)
28 var type = RegisteredExtensions[assetFileExtension];
29 var asset = (SourceCodeAsset)Activator.CreateInstance(type);
36 using (var writer =
new StreamWriter(stream,
Encoding.UTF8, 16384,
true))
38 writer.Write(((SourceCodeAsset)asset).Text);
42 public IAssetSerializer TryCreate(
string assetFileExtension)
44 return RegisteredExtensions.ContainsKey(assetFileExtension) ?
this : null;
48 internal class AssetYamlSerializer : IAssetSerializer, IAssetSerializerFactory
50 public object Load(
Stream stream,
string assetFileExtension)
52 return YamlSerializer.Deserialize(stream);
57 YamlSerializer.Serialize(stream, asset);
60 public IAssetSerializer TryCreate(
string assetFileExtension)
System.Text.Encoding Encoding
Use the default mode depending on the type of the field/property.