私はXNAでゲームを作っており、IntermediateSerializerを使ってすべてのレベル情報をXMLに書き込もうとしています。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;
}
}
のために作ってみましたシリアライザがある
したがって、たとえば、私はこれを持っています
シリアライズ機能が動作しますが、私が必要としていたのと同じXMLが得られますが、Deserializeメソッドは必要ありません。メソッドが呼び出されたときに、XMLパーサがこの位置に既にあるように見えます:
v
<MapObject Tag="Tree">12.10001 1.41174912 9.433376</MapObject>
は、私は全体MapContentためのシリアライザを記述することなく、「タグ」属性を取得する可能性のある方法はありますか?
他の方法では、属性を使用せずにXMLを効率的にする方法はありますか?
拡張機能を書く価値はあるのかどうか分かりませんが、とにかく見ていきます。他の選択肢については、私はそれが答えになると思った*一息*私はそれが今のままにそれを残すだろうと思う。とにかくありがとう! – Osguima3