1

i want to serialize the following class as child of another class.

[XmlInclude(typeof(string)), XmlInclude(typeof(XML_Variable))]
public class XMLTagDataSection
{
    [XmlElement("Offset")]
    public int XML_Offset        { get; set; }

    [XmlElement("Type")]
    public EnuDataType XML_type  { get; set; }

    [XmlElement("Value")]
    public object XML_Value      { get; set; }

    [XmlElement("Info")]
    public string XML_Info       { get; set; }

    [XmlElement("NumBytes")]
    public int XML_NumBytes      { get; set; }
}

public class XML_Variable
{
    [XmlElement("Variable", IsNullable = false)]       
    public int   Variable { get; set; }
}

this is my actual output:

<Data>
  <Offset>0</Offset>
  <Type>ASCII</Type>
  <Value xmlns:q1="http://www.w3.org/2001/XMLSchema" d7p1:type>test-string</Value>
  <Info>some text</Info>
  <NumBytes>11</NumBytes>
</Data>
<Data>
  <Offset>11</Offset>
  <Type>ASCII</Type>
  <Value d7p1:type="XML_Variable" xmlns:d7p1="http://www.w3.org/2001/XMLSchema-instance">
  <Variable>0</Variable>
  </Value>
  <Info>a variable</Info>
  <NumBytes>5</NumBytes>

how can i get rid of the namespace of my XML_Value element? to get the following output:

<Data>
  <Offset>0</Offset>
  <Type>ASCII</Type>
  <Value>test-string</Value>
  <Info>some text</Info>
  <NumBytes>11</NumBytes>
</Data>
<Data>
  <Offset>11</Offset>
  <Type>ASCII</Type>
  <Value>
    <Variable>0</Variable>
  </Value>
  <Info>a variable</Info>
  <NumBytes>5</NumBytes>

i use this part of code to serialize the parent element:

XmlSerializerNamespaces NameSpace = new XmlSerializerNamespaces();
NameSpace.Add("", "");

XmlSerializer xmlserializer = new XmlSerializer(typeof(XMLRoot));

FileStream str = new FileStream(fileName, FileMode.Create);

xmlserializer.Serialize(str, Root_Tag, NameSpace);

str.Close();

return true;

1 Answer 1

1

how can i get rid of the namespace of my XML_Value element? to get the following output:

Easy: it doesn't have one. The namespace of an element can either be specified with an alias prefix:

<foo:Value ...>

or via the reserved xmlns attribute:

<Value xmlns="...." ...>

What you are referring to is the namespace qualifiers for the additional information that XmlSerializer needs to deserialize that data. It only needs it because the type is object, and being dutiful, it wants to be able to understand that data later - otherwise it could never ever deserialize it. One option, then, is to declare your types correctly:

[XmlElement("Value")]
public XML_Variable XML_Value { get; set; }

which will then not need this additional information.

If none of these are possible, then XmlSerializer is not a good choice for you. Consider using XDocument (LINQ-to-XML) or XmlDocument instead.

The entire point of a serializer is to be able to transform the data in both directions, and that will never be possible for object without additional annotations.

Sign up to request clarification or add additional context in comments.

3 Comments

Thank you for the fast Response.
and there's no possibility for the XmlSerializer to seperate Tags depending on theire structure?
@user3226908 no, not really. You could implement IXmlSerializable, but that is frankly horrible. By the time you've done that, it would have been easier to use LINQ-to-XML or XmlDocument

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.