我正在使用 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>
有什么方法可以检索“Tag”属性而无需为整个 MapContent 编写序列化程序?
或者,是否有任何其他方法可以使 XML 高效,但不使用属性?