I can generate the following XML Document however i'm having trouble with the version attribute on the 'ISKeyValueList'element. I am using the xmlSerializer. I should note that this XML is being passed to an API which requires the exact structure as follows.
<Userdata>
<ISKeyValueList version="1.00">
<Item type="String" key="AgeOfDependents">8,6,1<Item/>
<Item type="Boolean" key="SecuritiesInPosession"> True </Item>
<Item type="Boolean" key="SecuritiesOwners"> True </item>
</ISKeyValueList>
</Userdata>
I have read several stack overflow bounties from which I have learned that to add the version attribute to the list I had to move the list into another class. The following generates the structure above however it adds an extra element which I want to avoid.
C#
UserData newUserData = new UserData();
newUserData.ISKeyValueList = new DataProperties();
newUserData.ISKeyValueList.Items = new List<Item>()
{
new Item()
{
Type = "String",
Key = "AgeOfDependents",
//Add data from form
Value = string.Join(",", application.applicants[0].ageOfDependants)
},
new Item(){ Type = "Boolean", Key = "SecuritiesInPossession", Value = "True" }
};
newClientDetails.UserData = newUserData;
//Pass object to serializer here
Model
public class UserData
{
public DataProperties ISKeyValueList { get; set; }
}
public class DataProperties
{
[XmlAttribute("version")]
public string Version { get; set; }
public List<Item> Items { get; set; }
public DataProperties()
{
Version = "1.00";
}
}
public class Item
{
[XmlAttribute("type")]
public string Type { get; set; }
[XmlAttribute("key")]
public string Key { get; set; }
[XmlText]
public string Value { get; set; }
}
Current Output
However this add extra, unwanted element (highlighted above) to the XML Document. Is there a way I can remove this extra element by configuring the model as i'd rather avoid setting up custom serializers etc.
Add the attribute
[XmlElement("Item")]
to yourDataProperties.Items
property.