Files
quro-animation-tools/AnimationEditor/MonoGame.Framework.Content.Pipeline/Serialization/Intermediate/ListSerializer.cs
T
quinnvoker c585f312a5 Made AnimationEditor compatible with Dictionary SpriteMaps
Added MonoGame Pipeline's IntermediateSerializer and needed classes from the pipeline and  MonoGame.Framework.Utilities to make AnimationEditor capable of reading Dictionaries
2018-11-24 16:43:44 -08:00

82 lines
2.8 KiB
C#

// MonoGame - Copyright (C) The MonoGame Team
// This file is subject to the terms and conditions defined in
// file 'LICENSE.txt', which is part of this source code package.
using System;
using System.Collections.Generic;
namespace Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate
{
[ContentTypeSerializer]
class ListSerializer<T> : ContentTypeSerializer<List<T>>
{
private ContentTypeSerializer _itemSerializer;
public ListSerializer() :
base("list")
{
}
public override bool CanDeserializeIntoExistingObject
{
get { return true; }
}
protected internal override void Initialize(IntermediateSerializer serializer)
{
_itemSerializer = serializer.GetTypeSerializer(typeof(T));
}
public override bool ObjectIsEmpty(List<T> value)
{
return value.Count == 0;
}
protected internal override void ScanChildren(IntermediateSerializer serializer, ChildCallback callback, List<T> value)
{
foreach (var item in value)
callback(_itemSerializer, item);
}
protected internal override List<T> Deserialize(IntermediateReader input, ContentSerializerAttribute format, List<T> existingInstance)
{
var result = existingInstance ?? new List<T>();
var elementSerializer = _itemSerializer as ElementSerializer<T>;
if (elementSerializer != null)
elementSerializer.Deserialize(input, result);
else
{
// Create the item serializer attribute.
var itemFormat = new ContentSerializerAttribute();
itemFormat.ElementName = format.CollectionItemName;
// Read all the items.
while (input.MoveToElement(itemFormat.ElementName))
{
var value = input.ReadObject<T>(itemFormat, _itemSerializer);
result.Add(value);
}
}
return result;
}
protected internal override void Serialize(IntermediateWriter output, List<T> value, ContentSerializerAttribute format)
{
var elementSerializer = _itemSerializer as ElementSerializer<T>;
if (elementSerializer != null)
elementSerializer.Serialize(output, value);
else
{
// Create the item serializer attribute.
var itemFormat = new ContentSerializerAttribute();
itemFormat.ElementName = format.CollectionItemName;
// Read all the items.
foreach (var item in value)
output.WriteObject(item, itemFormat, _itemSerializer);
}
}
}
}