XNA에서 XML 파일을 컨텐츠 파일로 사용하는 방법은 무엇입니까?


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는 XmlImporterXNA Content Pipeline의 일부를 사용하고있을 것 입니다. 파이프 라인은 XML을 XNB 파일로 변환하기 위해 XML을 역 직렬화합니다 (이 파일 ContentManager은 런타임에 로드 됨 ).
앤드류 러셀

답변:


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메소드에 전달 하고 객체를 재구성 할 수도 있습니다. 단지 작동하는지 확인하십시오. 또한 헤더에 올바른 인코딩을 넣을 가치가 있습니다. 예 : StringBuilderis utf-16 .)

에 대한 자세한 정보 IntermediateSerializer는 Shawn Hargreaves의 블로그를 참조하십시오. 이 게시물 부터 시작하여 2008 년 8 월까지 아카이브를 계속합니다.


1
+1 Shawn Hargreaves의이 게시물 시리즈는 훌륭합니다. XML을 생성하는 가장 쉬운 방법은 모두 동일한 코드를 가지고 있지만 콘텐츠 파이프 라인 어셈블리를 참조하는 "LevelEditor"프로젝트를 사용하여 코드에서 기본 속성을 사용하여 개체를 만든 다음 실제로로드 할 수 있도록 XML로 직렬화하는 것입니다. 게임 프로젝트.
michael.bartnett

0

코드 예제로 수행하는 방법을 보려면 http://create.msdn.com/en-US/education/catalog/sample/collision 과 같이 xml을 사용하는 샘플이 있습니다 .

진행 상황을 설명하는 기사를 읽고 xml 및 컨텐츠 프로세서로 작업하는 방법에 대한 통찰력을 얻으려면이 링크로 이동하여 중간 직렬 변환기 섹션으로 스크롤하여 8 또는 9 개의 기사를 읽으십시오. http://www.talula.demon.co.uk/blogindex.html

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.