Я делаю игру с XNA и пытаюсь записать всю информацию об уровне в XML с помощью IntermediateSerializer .
До сих пор у меня не было проблем с этим, ноВ XML слишком много тегов, и я хочу сделать его более эффективным.
Так, например, у меня есть следующее:
<Asset Type="Data:MapContent">
<Zone>Jungle</Zone>
<MapID>Jungle01</MapID>
<Size>42 40</Size>
<Objects>
<MapObject>
<Tag>Tree</Tag>
<Position>12.10001 1.41174912 9.433376</Position>
</MapObject>
<MapObject>
...
К которому я бы хотел обратиться:
<Asset Type="Data:MapContent">
<Zone>Jungle</Zone>
<MapID>Jungle01</MapID>
<Size>42 40</Size>
<Objects>
<MapObject Tag="Tree">12.10001 1.41174912 9.433376</MapObject>
...
Это сериализатор, который я пытался создать для MapObject
[ContentTypeSerializer]
class MapObjectSerializer : ContentTypeSerializer<MapObject>
{
protected override void Serialize(IntermediateWriter output, MapObject value, ContentSerializerAttribute format)
{
output.Xml.WriteAttributeString("Tag", value.Tag);
output.WriteObject(value.Position, new ContentSerializerAttribute() { ElementName = "Position", FlattenContent = true });
}
protected override MapObject Deserialize(IntermediateReader input, ContentSerializerAttribute format, MapObject existingInstance)
{
existingInstance.Tag = input.Xml.GetAttribute("Tag");
string[] pos = input.Xml.ReadElementString().Split(' ');
existingInstance.Position = new Vector3(float.Parse(pos[0]), float.Parse(pos[1]), float.Parse(pos[2]));
return existingInstance;
}
}
Функция Serialize работает, я получаю точный XML-код, который я хотел, но метод Deserialize - нет.Похоже, что при вызове метода синтаксический анализатор XML уже находится в этой позиции:
v
<MapObject Tag="Tree">12.10001 1.41174912 9.433376</MapObject>
Можно ли каким-либо образом получить атрибут «Tag», не создавая сериализатор для всего MapContent?
Или еще какой-нибудь другой способ сделать XML эффективным, но без использования атрибутов?