Serializing XML in C#

georgechicken

New Member
I usually search the web high and low for my answers but this time I am drawing a blank. I'm using VS2005 to write code to POST xml to an API. I have classes setup in C# that I serialize into an XML document. The classes are below:\[code\][Serializable] [XmlRoot(Namespace = "", IsNullable = false)] public class Request { public RequestIdentify Identify; public string Method; public string Params; } [Serializable] public class RequestIdentify { public string StoreId; public string Password; }\[/code\]When I serialize this I get:\[code\]<?xml version="1.0" encoding="UTF-8"?><Request xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> <Identify> <StoreId>00</StoreId> <Password>removed for security</Password> </Identify> <Method>ProductExport</Method> <Params /></Request>\[/code\]But the API returns a "No XML sent" error.If I send the xml directly in a string as:\[code\]string xml = @"<Request><Identify><StoreId>00</StoreId><Password>Removed for security</Password></Identify><Method>ProductExport</Method><Params /></Request>";\[/code\]effectively sending this xml (without the schema info in the "Request" tag):\[code\]<Request> <Identify> <StoreId>00</StoreId> <Password>Removed for security</Password> </Identify> <Method>ProductExport</Method> <Params /></Request>\[/code\]It seems to recognise the XML no problem.So my question I guess is how can I change my current classes to Serialize into XML and get the XML as in the second case? I assume I need another "parent" class to wrap around the existing ones and use InnerXml property on this "parent" or something similar but I don't know how to do this.Apologies for the question, I've only been using C# for 3 months and I'm a trainee developer who is having to teach himself on the job!Oh and PS I don't know why but VS2005 really does not want to let me set these classes up with private variables and then use getters and setters on public equivalents so I have them written how they are for now.Thanks in advance :-)UPDATE:As with most things it's very hard to find answers if you're not sure what you need to ask or how to word it but:Once I knew what to look for I found the answers I needed:Removing the XML declaration:\[code\]XmlWriterSettings writerSettings = new XmlWriterSettings();writerSettings.OmitXmlDeclaration = true;StringWriter stringWriter = new StringWriter();using (XmlWriter xmlWriter = XmlWriter.Create(stringWriter, writerSettings)){ serializer.Serialize(xmlWriter, request);}string xmlText = stringWriter.ToString();\[/code\]Removing/Setting the namespace (Thanks to above replies that helped find this one!):\[code\]XmlSerializerNamespaces ns = new XmlSerializerNamespaces();ns.Add("", "");\[/code\]Thanks for your help everyone who answered or pointed me in the right direction! And yes I did find articles to read once I knew what I was asking :-) It's the first time I have come unstuck in 3 months of teaching myself so I think I'm doing pretty well...
 
Back
Top