วิธีใช้ไฟล์ XML เป็นไฟล์เนื้อหาใน XNA


9

ฉันมีไฟล์ XML ที่เป็นตัวแทนของผู้ผลิตรถยนต์หลายรายที่จะให้บริการในเกมของฉัน ไฟล์มีลักษณะดังนี้:

<?xml version="1.0" encoding="utf-8" ?>
<XnaContent>
  <Asset Type="List[string]">
    <car>Audi</car>
    <car>BMW</car>
    <car>Nissan</car>
    <car>Volvo</car>
  </Asset>
</XnaContent>

เมื่อเพิ่มลงในโฟลเดอร์เนื้อหาของฉันคอมไพเลอร์ส่งคืนข้อผิดพลาดนี้:

There was an error while deserializing intermediate XML. Cannot find type "List`1"

ฉันจะสร้างรายการของสตริงวางลงใน XML และอ่านจาก XNA ได้อย่างไร


รหัสการเลิกใช้ของคุณจะมีประโยชน์ที่นี่
Tetrad

3
ฉันไม่มีรหัสดีซีเรียลไลซ์ บางทีนี่อาจเป็นที่ที่ปัญหาของฉันเริ่มต้นขึ้น?
eflles

3
เพื่อตอบคำถามของ Tetrad: eflles กำลังใช้XmlImporterส่วนของ XNA Content Pipeline ไพพ์ไลน์ deserializes XML เพื่อแปลงเป็นไฟล์ XNB (ซึ่งจะถูกโหลดโดยContentManagerณ รันไทม์)
Andrew Russell

คำตอบ:


14

ฉันไม่ได้พยายามค้นหาว่าเกิดอะไรขึ้นกับ XML ของคุณ - อาจเป็นเพราะไม่มีเนมสเปซ แต่นี่คือ XML ที่ถูกต้อง:

<?xml version="1.0" encoding="utf-8"?>
<XnaContent xmlns:Generic="System.Collections.Generic">
  <Asset Type="Generic:List[string]">
    <Item>Audi</Item>
    <Item>BMW</Item>
    <Item>Nissan</Item>
    <Item>Volvo</Item>
  </Asset>
</XnaContent>

ภายใต้ประทุนXmlImporterใช้IntermediateSerializerคลาส ดังนั้นโปรแกรมขนาดเล็กเช่นนี้สามารถใช้เพื่อกำหนดว่า XML ของคุณควรมีลักษณะอย่างไร:

var test = new List<string>(){ "Audi", "BMW", "Nissan", "Volvo" };
var sb = new StringBuilder();
using(XmlWriter writer = XmlWriter.Create(sb))
{
    IntermediateSerializer.Serialize(writer, test, null);
}
Console.Write(sb.ToString());

(คุณสามารถแปลงเอาต์พุตเป็นสตรีมส่งผ่านไปยังDeserializeเมธอดและสร้างวัตถุใหม่ - เพื่อให้แน่ใจว่ามันทำงานได้เป็นสองเท่านอกจากนี้มันอาจคุ้มค่าที่จะใส่การเข้ารหัสที่ถูกต้องในส่วนหัว - เช่น: StringBuilderutf-16 .)

สำหรับข้อมูลเชิงลึกเกี่ยวกับIntermediateSerializerลองดูที่บล็อกของ Shawn Hargreaves เริ่มต้นด้วยการโพสต์นี้และดำเนินการต่อผ่านทางจดหมายเหตุจนถึงเดือนสิงหาคม 2008


1
+1 โพสต์ของชุด Shawn Hargreaves เกี่ยวกับสิ่งนี้ยอดเยี่ยม วิธีที่ง่ายที่สุดในการสร้าง XML ของคุณคือการมีโครงการ "LevelEditor" ที่มีรหัสเดียวกันทั้งหมด แต่อ้างอิงแอสเซมบลีไปป์ไลน์ของเนื้อหาเพื่อให้คุณสามารถสร้างวัตถุของคุณด้วยแอตทริบิวต์ค่าเริ่มต้นในรหัส โครงการเกม
michael.bartnett

0

หากคุณต้องการดูวิธีการทำตามตัวอย่างโค้ดนี่คือตัวอย่างที่ใช้ xml เช่นคุณต้องการ http://create.msdn.com/en-US/education/catalog/sample/collision

หากคุณต้องการอ่านบทความที่อธิบายถึงสิ่งที่เกิดขึ้นและรับข้อมูลเชิงลึกเกี่ยวกับวิธีทำงานกับ xml & ตัวประมวลผลเนื้อหาให้ไปที่ลิงค์นี้เลื่อนลงไปที่ส่วน serializer ระดับกลางและอ่านบทความ 8 หรือ 9 ที่นั่น http://www.talula.demon.co.uk/blogindex.html

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.