Làm cách nào để sử dụng tệp XML làm tệp nội dung trong XNA?


9

Tôi có một tệp XML đại diện cho các nhà sản xuất xe hơi khác nhau sẽ có sẵn trong trò chơi của tôi. Các tập tin trông như thế này:

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

Khi thêm nó vào thư mục nội dung của tôi, trình biên dịch sẽ trả về lỗi này:

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

Làm cách nào tôi có thể tạo danh sách các chuỗi, đưa nó vào XML và đọc nó từ XNA?


Mã khử của bạn sẽ hữu ích ở đây.
Tetrad

3
Tôi không có mã khử. Có lẽ đây là nơi vấn đề của tôi bắt đầu?
eflles

3
Để trả lời câu hỏi của Tetrad: có lẽ các eflles đang sử dụng XmlImporter, một phần của Đường ống nội dung XNA. Đường ống giải tuần tự hóa XML để chuyển đổi nó thành tệp XNB (sau đó sẽ được tải ContentManagervào lúc chạy).
Andrew Russell

Câu trả lời:


14

Tôi đã không cố gắng tìm ra chính xác điều gì sai với XML của bạn - có lẽ đó là thiếu không gian tên. Nhưng đây là XML chính xác:

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

Dưới mui xe XmlImportersử dụng các IntermediateSerializerlớp. Vì vậy, một chương trình nhỏ như sau có thể được sử dụng để xác định XML của bạn nên là gì trông như thế nào:

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

(Bạn thậm chí có thể chuyển đổi đầu ra thành một luồng, chuyển nó sang Deserialize phương thức và xây dựng lại đối tượng - chỉ để chắc chắn rằng nó hoạt động. Ngoài ra, có lẽ nên đặt mã hóa đúng vào tiêu đề - ví dụ: StringBuilderlà utf-16 .)

Để biết một số thông tin chuyên sâu về IntermediateSerializer, hãy xem blog của Shawn Hargreaves, bắt đầu với bài đăng này và tiếp tục thông qua tài liệu lưu trữ cho đến tháng 8 năm 2008.


1
+1 loạt bài viết của Shawn Hargreaves về điều này thật tuyệt. Cách dễ nhất để tạo XML của bạn là có một dự án "LevelEditor" có tất cả cùng một mã, nhưng tham chiếu các cụm đường ống nội dung để bạn có thể tạo các đối tượng của mình với các thuộc tính mặc định trong mã, sau đó tuần tự hóa chúng thành XML để tải vào thực tế của bạn dự án trò chơi.
michael.bartnett

0

Nếu bạn muốn xem cách thực hiện bằng ví dụ mã, đây là một mẫu sử dụng xml như bạn muốn http://create.msdn.com/en-US/education/catalog/sample/collision

Nếu bạn muốn đọc các bài viết giải thích những gì đang diễn ra và hiểu rõ hơn về cách làm việc với xml & bộ xử lý nội dung, hãy truy cập liên kết này, cuộn xuống phần serializer trung gian và đọc 8 hoặc 9 bài viết ở đó. http://www.talula.demon.co.uk/blogindex.html

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.