I am using this method to serialize my object:
public static string XmlSerialize(object o)
{
var stringWriter = new StringWriter();
var xmlSerializer = new XmlSerializer(o.GetType());
xmlSerializer.Serialize(stringWriter, o);
string xml = stringWriter.ToString();
stringWriter.Close();
return xml;
}
It makes XML that starts like this:
<?xml version="1.0" encoding="utf-16"?>
<MyObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
But I want it to look like this:
<?xml version = "1.0" encoding="Windows-1252" standalone="yes"?>
<MyObject xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
So, how do I change the encoding to Windows-1252 and set standalone = yes? Additionally, how to I get the object to exclude the xmlns value?
I've seen a couple similar questions, like this one, but I was hoping it might be simpler for me, maybe by setting some attributes somewhere?
Update 2: After looking at John's answer and comments, and thinking about this more, I decided to just make a second method. I don't think that creating this wacky custom xml just for a 3rd party on one occasion should be called something as generic as "XmlSerialize" in the first place.
So, I created a second method that takes an XML document and first, removes the one namespace element like this:
xElement.Attributes().Where(a => a.IsNamespaceDeclaration && a.Value == "http://www.w3.org/2001/XMLSchema").Remove();
then, it it writes it to XML with John's code. Finally it returns that xml, following the output from this:
new XDeclaration("1.0", "Windows-1252", "yes").ToString()
And that's ugly, but it gets me exactly what I need for this 3rd party to understand my XML.
As with the CreatePo method, you must first construct an XmlSerializer, passing the type of class to be deserialized to the constructor. Also, a FileStream is required to read the XML document. To deserialize the objects, call the Deserialize method with the FileStream as an argument.
Jackson annotations are useful in defining and controlling the process of serialization and deserialization across various formats such as XML, JSON, and YAML. Some annotations work for all formats and some are tied to a specific type of file.
XmlRootAttribute Class (System. Xml. Serialization) Controls XML serialization of the attribute target as an XML root element.
The process of transforming the contents of an object into XML format is called serialization, and the reverse process of transforming an XML document into a . NET object is called deserialization. Page 2. An example. Let us take a C# class shown below (it could be VB.NET or any other .NET language for.
Try this:
public static string XmlSerialize(object o)
{
using (var stringWriter = new StringWriter())
{
var settings = new XmlWriterSettings
{
Encoding = Encoding.GetEncoding(1252),
OmitXmlDeclaration = true
};
using (var writer = XmlWriter.Create(stringWriter, settings))
{
var xmlSerializer = new XmlSerializer(o.GetType());
xmlSerializer.Serialize(writer, o);
}
return stringWriter.ToString();
}
}
This won't get rid of the xsd: namespace, but then, why do you want to?
Update: It seems that whenever you use a StringWriter
, you get UTF-16, even if you use an XmlWriter
on top of it with encoding set. Next step would be to write out to a MemoryStream
. But that raises the question of why you want to return a string. For instance, if you're going to just turn around and output the string to a stream, then we should output directly to this stream. Same for a TextWriter
.
You can use an XmlTextWriter instead of a StringWriter. Here is an extract from some of my code with your encoding set.
XmlTextWriter textWriter = new XmlTextWriter(stream, Encoding.GetEncoding(1252));
textWriter.Namespaces = false;
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With