Configuring XML Serialization to not add an element

  • Thread starter Thread starter Yash Ganthe
  • Start date Start date
Y

Yash Ganthe

Hi,

I have the follwoing class structure:

public class MyClass {
public Fields Fields;
}

public partial class Fields {

public BaseField[] myFields;

}

[System.Xml.Serialization.XmlInclude(typeof(DerivedField))]
public class BaseField
{
//some properties
}

[XmlRoot("derived")]
public partial class DerivedField : BaseField {
}

All the classes are tagged as serilizable.
When I XMLSerialize an object of type MyClass, here is what I get:
<MyClass>
<Fields>
<myFields>
<derived name="JobID" id="A" precision="9" />
</myFields>
</Fields>
</MyClass>

The serializer adds an XML element for every public property, which is
why myfields appears as a tag in the XML.
This is undesirable in my application as I would like the elements in
myFields[] to get serialized directly under <Fields> as :
<MyClass>
<Fields>
<derived name="JobID" id="A" precision="9" />
<derived name="JobID" id="B" precision="9" />
<derived1 name="JobID" id="C" precision="9" />
<derived2 name="JobID" id="D" precision="9" />
</Fields>
</MyClass>

Is there a way to instruct the serializer using Attributes or some
other to not add a tag for the myFields array?


Thanks,
Yash
 
Hi,

I suppose you either need to implement IXmlSerializable in MyClass, or make
the class Fields as a collection.
 
Yash Ganthe said:
Hi,

I have the follwoing class structure:

public class MyClass {
public Fields Fields;
}

public partial class Fields {

public BaseField[] myFields;

}

[System.Xml.Serialization.XmlInclude(typeof(DerivedField))]
public class BaseField
{
//some properties
}

[XmlRoot("derived")]
public partial class DerivedField : BaseField {
}

All the classes are tagged as serilizable.
When I XMLSerialize an object of type MyClass, here is what I get:
<MyClass>
<Fields>
<myFields>
<derived name="JobID" id="A" precision="9" />
</myFields>
</Fields>
</MyClass>

The serializer adds an XML element for every public property, which is
why myfields appears as a tag in the XML.
This is undesirable in my application as I would like the elements in
myFields[] to get serialized directly under <Fields> as :
<MyClass>
<Fields>
<derived name="JobID" id="A" precision="9" />
<derived name="JobID" id="B" precision="9" />
<derived1 name="JobID" id="C" precision="9" />
<derived2 name="JobID" id="D" precision="9" />
</Fields>
</MyClass>

Is there a way to instruct the serializer using Attributes or some
other to not add a tag for the myFields array?


Thanks,
Yash
.

You can use XmlIgnore as in the following:

public partial class Fields
{
[XmlIgnore()]
public BaseField[] myFields;
}


Mike
 
Back
Top