Teaching a man to fish

Teaching a man to fish

Rate This
  • Comments 14

Variants of the following question come up somewhat regularly on the XNA forums:

  • I want to import game data from an XML file
  • I plan to do this using the Content Pipeline IntermediateSerializer
  • I have my custom data type all ready to go
  • But I don't know how I should format the XML for it!

You already have the tools to answer this yourself. Here's how:

Fire up Visual Studio and create a new Console Application project.

Right-click on the References node, and add the Microsoft.Xna.Framework.Content.Pipeline assembly.

Add using declarations for the System.Xml and Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate namespaces.

Add a test class with the same layout as whatever data you want to serialize, but initialized with dummy test values. For instance:

    namespace XmlTest
    {
        class MyTest
        {
            public int elf = 23;
            public string hello = "Hello World";
        }
    }

Add this code to Main:

    MyTest testData = new MyTest();

    XmlWriterSettings settings = new XmlWriterSettings();
    settings.Indent = true;

    using (XmlWriter writer = XmlWriter.Create("test.xml", settings))
    {
        IntermediateSerializer.Serialize(writer, testData, null);
    }

Run the program. Look in the bin\Debug folder, and open the test.xml output file. With the class shown above, this will look like:

    <?xml version="1.0" encoding="utf-8"?>
    <XnaContent>
      <Asset Type="XmlTest.MyTest">
        <elf>23</elf>
        <hello>Hello World</hello>
      </Asset>
    </XnaContent>

Tada! That's how IntermediateSerializer represents this particular class in XML.

2011 update: as of XNA 4.0 you must change your project to target the full .NET Framework, as opposed to the Client Profile, before adding the Content Pipeline assembly reference. Nick has details.

  • I wanted to be able to build my spritesheets in my editor to do this I need a way to compile the spritesheet from a WinForms App into an .xnb file...

    Any pointers would be good :-)

  • dna8088: have you looked at this sample?

    http://creators.xna.com/en-us/sample/winforms_series2

  • Thanks for the link, But...

    "Note also that the XNA Framework redistributable installer does not include the Content Pipeline."

    That's a bit of a showstopper if I wanted to distribute my editor with image compiler feature :-(

  • That seems kinda odd, writing a class first with all the info you need in your app to convert it into xml and open the xml again

  • I would imagine that the point is you can load your class in-game then fill it with the neccessary data and serialise it after its all updated...

  • Justin: I think this was an exercise to get an idea of how the XML should be formed and not an example of how to build an app to write out the XML.  Granted, you could do it just like this and just have your editor instantiate all of the objects before writing them out, but you can just as easily have your editor (or game designer) write out XML using a different method (such as Notepad).

  • I'm currently trying to do the exact opposite, and use my xml spriteSheets from the XNA sample with the Winforms content loader example to build a map editor.  I can't   get the program to recognise the custom processor.  

    Tried:

    "SpriteSheetProcessor"

    and

    "Microsoft.Xna.Framework.Content.Pipeline.SpriteSheetProcessor" + xnaVersion

    I've added the references but can't seem to make it work and can't find the any answer on the forums.

    Is there an example of combining the Winforms Content Loader example with the spritesheets example?  Is it possible?

  • Actually, I am trying to understand now the relevance of these codes and how to apply them on my own. I am a fresh computer science student and I am currently learning the basic programming languages like C. Also, our teacher wants us to give her an essay explaining the internal processes going on behind the programming language.

  • As a profession i am a dentist but i have a lot interest in web programming so i am start learning coding and other language to make my site more competent.

  • Hello! I would imagine that the point is you can load your class in-game then fill it with the necessary data and serialize it after its all updated.

  • For this to work, the full ".NET Framework 4.0" as target framework is needed. When using ".NET Framework 4.0 Client Profile" the code can't be compiled.

  • exactly what i was looking for! been struggling at making my data from scratch on my my own. cheers

  • This info is available in a million places and everyone who has an error "at all" seems to get pushed to one of the many blogs with this information. I have yet to see someones issue actually get solved by one of these blog posts...sorry to vent here, just sick of reading this exact same info on 20 different blogs...

  • Hi Blah,

    I can assure you the technique described in this article absolutely does work to discover what format XML should be used to deserialize into any custom type using IntermediateSerializer.

    If your problem is something other than that, obviously this article will not help you. Afraid there's not much I can do to help you there, since you don't say what problem you are having!

Page 1 of 1 (14 items)
Leave a Comment
  • Please add 2 and 4 and type the answer here:
  • Post