私は XNA でゲームを作成しており、IntermediateSerializerを使用してすべてのレベル情報を XML に書き込もうとしています。
これまでのところ問題はありませんでしたが、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>
MapContent 全体のシリアライザーを記述せずに「タグ」属性を取得する方法はありますか?
または、属性を使用せずに XML を効率的にする他の方法はありますか?