XNA'da XML dosyaları içerik dosyaları olarak nasıl kullanılır?


9

Oyunumda bulunabilecek farklı otomobil üreticilerini temsil eden bir XML dosyam var. Dosya şöyle görünür:

<?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>

İçerik klasörüme eklerken, derleyici bu hatayı döndürür:

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

Dizelerin bir listesini nasıl oluşturabilir, XML'ye koyabilir ve XNA'dan nasıl okuyabilirim?


Serileştirme kodunuz burada yararlı olacaktır.
Nisan'da Tetrad

3
Serileştirme kodu yok. Belki de sorunum burada başlıyor?
eflles

3
Tetrad'ın sorusunu cevaplamak için: muhtemelen eflles, XmlImporterXNA İçerik Boru Hattı'nın bir bölümünü kullanıyor . Boru hattı, XML'i bir XNB dosyasına dönüştürmek için serisini kaldırır (daha sonra ContentManagerçalışma zamanında yüklenir ).
Andrew Russell

Yanıtlar:


14

XML'inizde neyin yanlış olduğunu bulmaya çalışmadım - muhtemelen bir ad alanının olmaması. Ama burada doğru 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>

Kaputun altında sınıfı XmlImporterkullanır IntermediateSerializer. Bu nedenle, XML'nizin neye benzemesi gerektiğini belirlemek için aşağıdakine benzer küçük bir program kullanılabilir :

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());

(Çıktıyı bir akışa dönüştürebilir, Deserializeyönteme geçirebilir ve nesneyi yeniden oluşturabilirsiniz - sadece iki kat çalıştığından emin olmak için.StringBuilder is utf-16 .)

Hakkında bazı derinlemesine bilgi için IntermediateSerializer, bu yazıdan başlayıp Ağustos 2008'e kadar arşivlerde devam ederek Shawn Hargreaves'in bloguna bir göz atın .


1
+1 Shawn Hargreaves'in bu konudaki yayınları harika. XML'nizi oluşturmanın en kolay yolu, aynı koda sahip olan ancak Content Pipeline derlemelerine başvuruda bulunan ve nesnelerinizi kodda varsayılan özniteliklere sahip olarak oluşturabilmeniz ve daha sonra gerçekte yüklemek için bunları XML'ye serileştirebilmeniz için bir "LevelEditor" projesine sahip olmaktır. oyun projesi.
michael.bartnett

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.