我正在用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;
}
}
串行
Serialize函數起作用,我得到了我想要的確切XML,但Deserialize方法沒有。它看起來當方法被調用一樣,XML解析器已經在這個位置:
v
<MapObject Tag="Tree">12.10001 1.41174912 9.433376</MapObject>
有什麼辦法,我可以取回「變量」屬性,而無需編寫串行器整個MapContent?
或者,還有其他方法可以使XML高效,但不使用屬性?
那麼,我真的不知道是否值得寫一個擴展名,但我會看看。至於另一種選擇,我認爲這將是答案*嘆*我想我會離開它就像現在一樣。不管怎麼說,還是要謝謝你! – Osguima3 2013-04-17 20:45:40