Configuring XML Serialization to not add an element

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
 
H

Hovhannes Terteryan

Hi,

I suppose you either need to implement IXmlSerializable in MyClass, or make
the class Fields as a collection.
 
F

Family Tree Mike

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top