User not logged in - login - register
Home Calendar Books School Tool Photo Gallery Message Boards Users Statistics Advertise Site Info
go to bottom | |
 Message Boards » » XNA XML Serializer question Page [1]  
spöokyjon

18617 Posts
user info
edit post

I'm trying to work through the XNA tutorial on using XML files with the content pipeline, but I keep running into trouble. All I'm getting is a relatively blank XML file:

<?xml version="1.0" encoding="utf-8"?>
<XnaContent>
<Asset Type="BlockPipeline.BlockPipelineContent" />
</XnaContent>


After debuggin/stepping though code, I've found that the custom writer method is never actually called, which would explain why the custom class writing never shows up in the XML. My problem is that the tutorial doesn't really explain the link between the custom ContentTypeWriter.Write() function and what goes on in the main part of the code.

Okay, with these two code snippets here:

This is the main function of the program; this stuff always runs
using System.Xml;
using Microsoft.Xna.Framework.Content.Pipeline.Serialization.Intermediate;

namespace BlockPipeline
{
class TempMain
{
public static void Main()
{
BlockPipelineContent testBlock = new BlockPipelineContent();

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

using (XmlWriter xmlWriter = XmlWriter.Create("testSettings.xml", settings))
{
IntermediateSerializer.Serialize(xmlWriter, testBlock, null);
}
}
}
}



and this part SHOULD be called, but it never is:
using System;
using System.Collections.Generic;
using System.Text;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Content.Pipeline.Serialization.Compiler;
using Microsoft.Xna.Framework.Graphics;

namespace BlockPipeline
{
[ContentTypeWriter]
class BlockSettingsWriter : ContentTypeWriter
{
protected override void Write(ContentWriter output, BlockPipelineContent value)
{
output.Write(value.getPosition());
output.Write(value.getMySpriteString());
output.Write(value.isSolid());
output.Write(value.getZ());

}

public override string GetRuntimeType(TargetPlatform targetPlatform)
{
return "Extinctathon.Block, Extinctathon";
}

public override string GetRuntimeReader(TargetPlatform targetPlatform)
{
return "Extinctathon.BlockReader, Extinctathon";
}
}


}


I'm getting these XML files without anything custom written to them. Any suggestions?

Oh, and of course when this issue comes up creators.xna.com is down.

5/20/2008 10:53:10 AM

Rat
Suspended
5724 Posts
user info
edit post

um n/m. hold up. let me have a look

[Edited on May 20, 2008 at 11:01 AM. Reason : .]

5/20/2008 11:00:23 AM

Rat
Suspended
5724 Posts
user info
edit post

I'm not familiar with:

[ContentTypeWriter]
class BlockSettingsWriter : ContentTypeWriter


I typically use-> XmlDocument
and add -> XmlNode nodes to it.

just add an xml file to your content or a folder somewhere and pass it that location and add/subtract from it as you with using those classes

5/20/2008 11:18:00 AM

qntmfred
retired
40726 Posts
user info
edit post

i'm not familiar with XNA

but looking at the code, i don't see why the BlockSettingsWriter Write method would be called. your Main() doesn't use a BlockSettingsWriter object

[Edited on May 20, 2008 at 12:45 PM. Reason : per the this part SHOULD be called comment]

5/20/2008 12:45:08 PM

spöokyjon

18617 Posts
user info
edit post

Yeah...like I said, I don't at this point understand the actual flow of the program. However, this is the method that is given in Microsoft's XNA tutorials, but of course that whole site is down at the moment.

HRM.

5/20/2008 12:51:32 PM

spöokyjon

18617 Posts
user info
edit post

lulz, they totally revamped/relaunched the XNA site totay and as far as I can tell the tutorial I was working from is no longer a part of the site

5/20/2008 3:45:01 PM

tsavla
All American
6787 Posts
user info
edit post

5/20/2008 3:55:12 PM

spöokyjon

18617 Posts
user info
edit post

For anybody who cares to know, for some reason, although the tutorial I was using tells you how to write the ContentTypeWriter, it apparently doesn't really use it (or something).

Any public members of the class will be written to the XML file. I changed the neccessary members to public and that now works. Going to XNA forums for the rest

5/20/2008 5:03:47 PM

spöokyjon

18617 Posts
user info
edit post

Also, FWIW, the purpose of using the custom ContentTypeWriter/Reader is so that you can add XML files to your project which are converted to XMB (i.e. binary XML files) at compile time for teh speed boosts and whatnot.

5/20/2008 6:52:32 PM

 Message Boards » Tech Talk » XNA XML Serializer question Page [1]  
go to top | |
Admin Options : move topic | lock topic

© 2024 by The Wolf Web - All Rights Reserved.
The material located at this site is not endorsed, sponsored or provided by or on behalf of North Carolina State University.
Powered by CrazyWeb v2.39 - our disclaimer.