4 using System.Collections.Generic;
6 using SiliconStudio.Assets.Serializers;
7 using SiliconStudio.Core;
9 namespace SiliconStudio.Assets
16 private static readonly List<IAssetSerializerFactory> RegisteredSerializerFactories =
new List<IAssetSerializerFactory>();
30 Register(SourceCodeAssetSerializer.Default);
40 if (serializerFactory == null)
throw new ArgumentNullException(
"serializerFactory");
41 if (!RegisteredSerializerFactories.Contains(serializerFactory))
42 RegisteredSerializerFactories.Add(serializerFactory);
52 if (assetFileExtension == null)
throw new ArgumentNullException(
"assetFileExtension");
53 assetFileExtension = assetFileExtension.ToLowerInvariant();
54 for (
int i = RegisteredSerializerFactories.Count - 1; i >= 0; i--)
56 var assetSerializerFactory = RegisteredSerializerFactories[i];
57 var factory = assetSerializerFactory.TryCreate(assetFileExtension);
72 public static T Load<T>(
string filePath)
74 return (T)Load(filePath);
82 public static object Load(
string filePath)
84 using (var stream =
new FileStream(filePath,
FileMode.Open, FileAccess.Read, FileShare.Read))
86 return Load(stream, Path.GetExtension(filePath));
96 public static object Load(
Stream stream,
string assetFileExtension)
98 if (assetFileExtension == null)
throw new ArgumentNullException(
"assetFileExtension");
99 assetFileExtension = assetFileExtension.ToLowerInvariant();
101 var serializer = FindSerializer(assetFileExtension);
102 if (serializer == null)
104 throw new InvalidOperationException(
"Unable to find a serializer for [{0}]".ToFormat(assetFileExtension));
106 var asset = serializer.Load(stream, assetFileExtension);
116 public static void Save(
string filePath,
object asset)
118 if (filePath == null)
throw new ArgumentNullException(
"filePath");
121 filePath = FileUtility.GetAbsolutePath(filePath);
122 var directoryPath = Path.GetDirectoryName(filePath);
123 if (directoryPath != null && !Directory.Exists(directoryPath))
125 Directory.CreateDirectory(directoryPath);
128 using (var stream =
new FileStream(filePath,
FileMode.Create, FileAccess.Write, FileShare.Write))
146 if (stream == null)
throw new ArgumentNullException(
"stream");
147 if (asset == null)
return;
149 var assetFileExtension = AssetRegistry.GetDefaultExtension(asset.GetType());
150 if (assetFileExtension == null)
152 throw new ArgumentException(
"Unable to find a serializer for the specified asset. No asset file extension registered to AssetRegistry");
155 var serializer = FindSerializer(assetFileExtension);
156 if (serializer == null)
158 throw new InvalidOperationException(
"Unable to find a serializer for [{0}]".ToFormat(assetFileExtension));
160 serializer.Save(stream, asset);
System.IO.FileMode FileMode
static object Load(string filePath)
Deserializes an Asset from the specified stream.
Use the default mode depending on the type of the field/property.
static void Save(Stream stream, object asset)
Serializes an Asset to the specified stream.
Main entry point for serializing/deserializing Asset.
static IAssetSerializer FindSerializer(string assetFileExtension)
Finds a serializer for the specified asset file extension.
static void Save(string filePath, object asset)
Serializes an Asset to the specified file path.
static void Register(IAssetSerializerFactory serializerFactory)
Registers the specified serializer factory.
static object Load(Stream stream, string assetFileExtension)
Deserializes an Asset from the specified stream.