Reputation: 6159
I am trying to serialize an object to XML using XmlSerializer
I am expecting to get something like this:
<User>
<username>administrator</username>
<email>[email protected]</email>
<roles>
<whatever id="D3DCBCDA-AD61-4764-B5A1-057D654F1C26">
<role>admin</role>
</whatever>
</roles>
</user>
But instead I'm getting this:
<User>
<username>administrator</username>
<email>[email protected]</email>
<roles>
<RoleDTO id="D3DCBCDA-AD61-4764-B5A1-057D654F1C26">
<role>admin</role>
</RoleDTO>
</roles>
</User>
Code
XmlSerializer x = new System.Xml.Serialization.XmlSerializer(xml.GetType());
XmlSerializer xsSubmit = new XmlSerializer(typeof(UserDTO));
StringWriter sww = new StringWriter();
XmlWriter writer = XmlWriter.Create(sww);
xsSubmit.Serialize(writer, user);
var xmll = sww.ToString(); // My xml
List<RoleDTO> rl = new List<RoleDTO>();
rl.Add(new RoleDTO { roleId = new Guid("D3DCBCDA-AD61-4764-B5A1-057D654F1C26"), role = "admin" });
UserDTO user = new UserDTO
{
username = "administrator",
email = "[email protected]",
role = rl
};
Model
namespace Model.DTO
{
[XmlRoot("User")]
public class UserDTO
{
public string username { get; set; }
public string email { get; set; }
public List<RoleDTO> role { get; set; }
}
public class RoleDTO
{
[XmlAttribute("Id")]
public Guid roleId { get; set; }
public string role { get; set; }
}
}
I tried to decorate class RoleDTO with [XmlRoot("whatever")]
, [XmlElement("whatever")]
without succes.
Any ideas?
Upvotes: 1
Views: 493
Reputation: 5147
You need to decorate the role property of the User DTO class with
[XmlElement("whatever")]
not the RoleDTO class.
public class UserDTO
{
public string username { get; set; }
public string email { get; set; }
[XmlElement("whatever")]
public List<RoleDTO> role { get; set; }
}
Upvotes: 1